Skip to content

Commit cd632e9

Browse files
author
Prateek Narang
committed
added code
0 parents  commit cd632e9

File tree

119 files changed

+6285
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

119 files changed

+6285
-0
lines changed

.DS_Store

16 KB
Binary file not shown.

01 Arrays & Vectors/.DS_Store

6 KB
Binary file not shown.

01 Arrays & Vectors/01 vector.cpp

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#include<iostream>
2+
#include<vector>
3+
using namespace std;
4+
5+
int main(){
6+
//Demo Vector
7+
//vector<int> arr = //{1,2,10,12,15};
8+
9+
//Fill Constructor
10+
vector<int> arr(10,7);
11+
12+
//Fill Constructor
13+
vector<int> visited(100,0);
14+
15+
//Pop_back
16+
arr.pop_back();
17+
// Push_Back O(1)
18+
arr.push_back(16);
19+
20+
//Print all the elements
21+
for(int x : arr){
22+
cout << x <<",";
23+
}
24+
25+
/*for(int i=0;i< arr.size(); i++){
26+
cout << arr[i] <<endl;
27+
}*/
28+
29+
return 0;
30+
}

01 Arrays & Vectors/02 2dvector.cpp

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#include<iostream>
2+
#include<vector>
3+
using namespace std;
4+
5+
6+
int main(){
7+
//2D Vector
8+
vector< vector<int> > arr = {
9+
{1,2,3},
10+
{4,5,6},
11+
{7,8,9,10},
12+
{11,12}};
13+
14+
15+
arr[0][0] += 10; //update
16+
17+
for(int i=0;i< arr.size(); i++){
18+
19+
for(int number : arr[i]){
20+
cout << number <<",";
21+
}
22+
cout <<endl;
23+
}
24+
25+
26+
return 0;
27+
}

01 Arrays & Vectors/04 triplets.cpp

+58
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
#include<iostream>
2+
#include<vector>
3+
#include<algorithm>
4+
using namespace std;
5+
6+
vector<vector<int> > triplets(vector<int> arr,int targetSum){
7+
//Logic
8+
int n = arr.size();
9+
sort(arr.begin(),arr.end());
10+
vector<vector<int> > result;
11+
12+
// Pick every a[i], pair sum for remaining part
13+
for(int i=0; i<=n-3;i++){
14+
15+
int j = i + 1;
16+
int k = n - 1;
17+
18+
//two pointer approach
19+
while(j < k){
20+
int current_sum = arr[i];
21+
current_sum += arr[j];
22+
current_sum += arr[k];
23+
24+
if(current_sum==targetSum){
25+
result.push_back({arr[i],arr[j],arr[k]});
26+
j++;
27+
k--;
28+
}
29+
else if(current_sum > targetSum){
30+
k--;
31+
}
32+
else{
33+
j++;
34+
}
35+
}
36+
37+
}
38+
return result;
39+
40+
}
41+
42+
int main(){
43+
44+
vector<int> arr{1, 2, 3, 4, 5, 6, 7, 8, 9, 15};
45+
int S = 18;
46+
47+
auto result = triplets(arr,S);
48+
49+
for(auto v : result){
50+
for(auto no : v){
51+
cout<<no<<",";
52+
}
53+
cout<<endl;
54+
}
55+
56+
57+
return 0;
58+
}

01 Arrays & Vectors/05 mountain.cpp

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
#include<iostream>
2+
#include<vector>
3+
using namespace std;
4+
5+
6+
int highest_mountain(vector<int> a){
7+
int n = a.size();
8+
9+
int largest = 0;
10+
11+
for(int i=1;i<=n-2;){
12+
13+
//check a[i] is peak or not
14+
if(a[i]>a[i-1] and a[i]>a[i+1]){
15+
//do some work
16+
int cnt = 1;
17+
int j = i;
18+
//cnt backwards (left)
19+
while(j>=1 and a[j]>a[j-1]){
20+
j--;
21+
cnt++;
22+
}
23+
//cnt forwards (right)
24+
while(i<=n-2 and a[i]>a[i+1]){
25+
i++;
26+
cnt++;
27+
}
28+
largest = max(largest,cnt);
29+
30+
}
31+
else{
32+
i++;
33+
}
34+
}
35+
return largest;
36+
37+
}
38+
39+
int main(){
40+
41+
vector<int> arr{5,6,1,2,3,4,5,4,3,2,0,1,2,3,-2,4};
42+
43+
cout<< highest_mountain(arr)<<endl;
44+
45+
46+
47+
return 0;
48+
}
+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
#include<iostream>
2+
#include<vector>
3+
#include<unordered_set>
4+
using namespace std;
5+
6+
int largestBand(vector<int> arr){
7+
int n = arr.size();
8+
unordered_set<int> s;
9+
10+
//Data inside a set
11+
for(int x : arr){
12+
s.insert(x);
13+
}
14+
15+
//Iterate over the arr
16+
int largestLen = 1;
17+
18+
for(auto element : s){
19+
int parent = element - 1;
20+
21+
if(s.find(parent)==s.end()){
22+
//find entire band / chain starting from element
23+
int next_no = element + 1;
24+
int cnt = 1;
25+
26+
while(s.find(next_no)!=s.end()){
27+
next_no++;
28+
cnt++;
29+
}
30+
31+
if(cnt>largestLen){
32+
largestLen = cnt;
33+
}
34+
}
35+
}
36+
37+
38+
return largestLen;
39+
}
40+
41+
42+
43+
int main(){
44+
45+
vector<int> arr{1, 9, 3, 0, 18, 5, 2, 10, 7, 12, 6};
46+
cout << largestBand(arr)<<endl;
47+
48+
return 0;
49+
}
+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
#include <iostream>
2+
#include <vector>
3+
using namespace std;
4+
5+
6+
int trappedWater(vector<int> heights) {
7+
8+
//Complete
9+
int n = heights.size();
10+
if(n<=2){
11+
return 0;
12+
}
13+
14+
//Left Max, Right Max
15+
vector<int> left(n,0), right(n,0);
16+
left[0] = heights[0];
17+
right[n-1] = heights[n-1];
18+
19+
for(int i=1;i<n;i++){
20+
left[i] = max(left[i-1],heights[i]);
21+
right[n-i-1] = max(right[n-i],heights[n-i-1]);
22+
}
23+
24+
//water
25+
int water = 0;
26+
for(int i=0;i<n;i++){
27+
water += min(left[i],right[i]) - heights[i];
28+
}
29+
30+
return water;
31+
}
32+
33+
int main() {
34+
vector<int> water = {0,1,0,2,1,0,1,3,2,1,2,1};
35+
cout<<trappedWater(water)<<endl;
36+
return 0;
37+
}
+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
#include <iostream>
2+
#include<algorithm>
3+
#include <vector>
4+
using namespace std;
5+
6+
bool outOfOrder(vector<int> arr,int i){
7+
int x = arr[i];
8+
if(i==0){
9+
return x > arr[1];
10+
}
11+
if(i==arr.size()-1){
12+
return x < arr[i-1];
13+
}
14+
return x > arr[i+1] or x < arr[i-1];
15+
16+
}
17+
18+
pair<int,int> subarraySort(vector<int> arr) {
19+
20+
int smallest = INT_MAX;
21+
int largest = INT_MIN;
22+
23+
for(int i=0;i<arr.size();i++){
24+
int x = arr[i];
25+
26+
if(outOfOrder(arr,i)){
27+
smallest = min(smallest,x);
28+
largest = max(largest,x);
29+
}
30+
}
31+
32+
//next step find the right index where smallest and largest lie (subarray) for out solution
33+
if(smallest==INT_MAX){
34+
return {-1,-1};
35+
}
36+
37+
int left = 0;
38+
while(smallest >= arr[left]){
39+
left++;
40+
}
41+
int right = arr.size() - 1;
42+
while(largest <= arr[right]){
43+
right--;
44+
}
45+
46+
return {left,right};
47+
48+
}
49+
50+
int main() {
51+
vector<int> arr = {1, 2, 3, 4, 5, 8, 6, 7, 9, 10, 11};
52+
auto p = subarraySort(arr);
53+
cout<< p.first <<" and "<<p.second <<endl;
54+
55+
return 0;
56+
}

01 Arrays & Vectors/09 min_swaps.cpp

+55
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
#include <iostream>
2+
#include<vector>
3+
#include<algorithm>
4+
using namespace std;
5+
6+
int countMinSwaps(vector<int> arr){
7+
8+
// Know the actual positions of elements (sorting)
9+
//store the current indices
10+
int n = arr.size();
11+
pair<int,int> ap[n];
12+
for(int i=0;i<n;i++){
13+
ap[i].first = arr[i];
14+
ap[i].second = i;
15+
}
16+
17+
//sorting
18+
sort(ap,ap+n);
19+
20+
//build the main logic
21+
vector<bool> visited(n,false);
22+
23+
int ans = 0;
24+
for(int i=0;i<n;i++){
25+
26+
// if element is visited or element is in right postion
27+
int old_position = ap[i].second;
28+
if(visited[i]==true or old_position==i){
29+
continue;
30+
}
31+
32+
// visiting the element (index) for first time
33+
int node = i;
34+
int cycle = 0;
35+
36+
while(!visited[node]){
37+
visited[node] = true;
38+
int next_node = ap[node].second;
39+
node = next_node;
40+
cycle += 1;
41+
}
42+
ans += (cycle-1);
43+
44+
}
45+
46+
return ans;
47+
48+
}
49+
50+
51+
int main() {
52+
vector<int> arr{5,4,3,2,1};
53+
cout<<countMinSwaps(arr)<<endl;
54+
return 0;
55+
}

0 commit comments

Comments
 (0)