Skip to content

Commit 425e443

Browse files
added on 23/05/24
1 parent 48f9ca5 commit 425e443

File tree

5 files changed

+244
-0
lines changed

5 files changed

+244
-0
lines changed

CS_54_Sort01.cpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
#include <bits/stdc++.h>
2+
using namespace std;
3+
4+
void sortZeroesAndOne(int input[], int size)
5+
{
6+
int i = 0;
7+
int l = size - 1;
8+
while (i < l)
9+
{
10+
if (input[i] == 0)
11+
{
12+
i++;
13+
}
14+
else
15+
{
16+
swap(input[i], input[l]);
17+
l--;
18+
}
19+
}
20+
}
21+
22+
int main()
23+
{
24+
int input[] = {0, 1, 0, 1, 0, 0, 1, 1, 1, 0};
25+
int size = sizeof(input) / sizeof(input[0]);
26+
sortZeroesAndOne(input, size);
27+
for (int i = 0; i < size; i++)
28+
{
29+
cout << input[i] << " ";
30+
}
31+
return 0;
32+
}

LC_173_RotateArray.cpp

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
#include <bits/stdc++.h>
2+
using namespace std;
3+
4+
class Solution
5+
{
6+
public:
7+
// tc : O(n), sc : O(n)
8+
void method1(vector<int> &nums, int n, int k)
9+
{
10+
vector<int> ans(n);
11+
12+
for (int i = 0; i < n; i++)
13+
{
14+
int newi = (i + k) % n;
15+
ans[newi] = nums[i];
16+
}
17+
nums = ans;
18+
}
19+
20+
// tc : O(n), sc : O(1)
21+
void method2(vector<int> &nums, int n, int k)
22+
{
23+
reverse(nums.begin(), nums.begin() + n - k);
24+
reverse(nums.begin() + n - k, nums.begin() + n);
25+
reverse(nums.begin(), nums.end());
26+
}
27+
28+
void rotate(vector<int> &nums, int k)
29+
{
30+
int n = nums.size();
31+
k = k % n;
32+
// method1(nums, n, k);
33+
method2(nums, n, k);
34+
}
35+
};
36+
37+
int main()
38+
{
39+
Solution sol;
40+
vector<int> nums = {1, 2, 3, 4, 5, 6, 7};
41+
int k = 3;
42+
sol.rotate(nums, k);
43+
for (int i = 0; i < nums.size(); i++)
44+
{
45+
cout << nums[i] << " ";
46+
}
47+
return 0;
48+
}

LC_174_SortColors.cpp

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
#include <bits/stdc++.h>
2+
using namespace std;
3+
4+
class Solution {
5+
public:
6+
// tc : O(n), sc : O(1)
7+
void sortColors(vector<int>& arr) {
8+
int n = arr.size();
9+
int low = 0, mid = 0, high = n - 1;
10+
while (mid <= high)
11+
{
12+
if (arr[mid] == 0)
13+
{
14+
swap(arr[mid], arr[low]);
15+
low++;
16+
mid++;
17+
}
18+
else if (arr[mid] == 1)
19+
mid++;
20+
else
21+
{
22+
swap(arr[mid], arr[high]);
23+
high--;
24+
}
25+
}
26+
}
27+
};
28+
29+
int main() {
30+
Solution sol;
31+
vector<int> arr = {2, 0, 2, 1, 1, 0};
32+
sol.sortColors(arr);
33+
for (int i = 0; i < arr.size(); i++)
34+
{
35+
cout << arr[i] << " ";
36+
}
37+
return 0;
38+
}

LC_175_3Sum.cpp

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
#include <bits/stdc++.h>
2+
using namespace std;
3+
4+
class Solution {
5+
public:
6+
vector<vector<int>> threeSum(vector<int>& arr) {
7+
int n = arr.size();
8+
// brute
9+
// set<vector<int>> ans;
10+
// for(int i = 0; i<n; i++){
11+
// for(int j = 0; j<n; j++){
12+
// for(int k = 0; k<n; k++){
13+
// if(i==j || i==k || j==k) continue;
14+
15+
// if(arr[i] + arr[j] + arr[k] == 0){
16+
// vector<int> trip = {arr[i], arr[j], arr[k]};
17+
// sort(trip.begin(), trip.end());
18+
// ans.insert(trip);
19+
// }
20+
// }
21+
// }
22+
// }
23+
// return vector<vector<int>>(ans.begin(), ans.end());
24+
25+
// better
26+
// set<vector<int>> st;
27+
28+
// for (int i = 0; i < n; i++) {
29+
// set<int> hashset;
30+
// for (int j = i + 1; j < n; j++) {
31+
// // Calculate the 3rd element:
32+
// int third = -(arr[i] + arr[j]);
33+
34+
// // Find the element in the set:
35+
// if (hashset.find(third) != hashset.end()) {
36+
// vector<int> temp = {arr[i], arr[j], third};
37+
// sort(temp.begin(), temp.end());
38+
// st.insert(temp);
39+
// }
40+
// hashset.insert(arr[j]);
41+
// }
42+
// }
43+
44+
// // store the set in the answer:
45+
// vector<vector<int>> ans(st.begin(), st.end());
46+
// return ans;
47+
48+
// optimal
49+
vector<vector<int>> ans;
50+
sort(arr.begin(), arr.end());
51+
for (int i = 0; i < n; i++) {
52+
// remove duplicates:
53+
if (i != 0 && arr[i] == arr[i - 1])
54+
continue;
55+
56+
// moving 2 pointers:
57+
int j = i + 1;
58+
int k = n - 1;
59+
while (j < k) {
60+
int sum = arr[i] + arr[j] + arr[k];
61+
if (sum < 0) {
62+
j++;
63+
} else if (sum > 0) {
64+
k--;
65+
} else {
66+
vector<int> temp = {arr[i], arr[j], arr[k]};
67+
ans.push_back(temp);
68+
j++;
69+
k--;
70+
// skip the duplicates:
71+
while (j < k && arr[j] == arr[j - 1])
72+
j++;
73+
while (j < k && arr[k] == arr[k + 1])
74+
k--;
75+
}
76+
}
77+
}
78+
return ans;
79+
}
80+
};
81+
82+
int main() {
83+
Solution sol;
84+
vector<int> arr = {-1, 0, 1, 2, -1, -4};
85+
vector<vector<int>> ans = sol.threeSum(arr);
86+
for (auto v : ans) {
87+
for (int i : v) {
88+
cout << i << " ";
89+
}
90+
cout << endl;
91+
}
92+
return 0;
93+
}

RotateArrayByOne.cpp

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
#include <bits/stdc++.h>
2+
using namespace std;
3+
4+
void rightRotateByOne(int arr[], int n){
5+
int lastVal = arr[n-1];
6+
for(int i = n-1; i>0; i--){
7+
arr[i] = arr[i-1];
8+
}
9+
arr[0] = lastVal;
10+
}
11+
12+
void leftRotateByOne(int arr[], int n){
13+
int firstVal = arr[0];
14+
for(int i = 0; i<n-1; i++){
15+
arr[i] = arr[i+1];
16+
}
17+
arr[n-1] = firstVal;
18+
}
19+
20+
int main(){
21+
int arr[] = {1, 2, 3, 4, 5};
22+
int n = sizeof(arr)/sizeof(int);
23+
rightRotateByOne(arr, n);
24+
for(auto it: arr){
25+
cout << it << " ";
26+
}
27+
cout << endl;
28+
leftRotateByOne(arr, n);
29+
for(auto it: arr){
30+
cout << it << " ";
31+
}
32+
return 0;
33+
}

0 commit comments

Comments
 (0)