Skip to content

Commit f4d7148

Browse files
committed
Added C++ Solution
1 parent ad50838 commit f4d7148

File tree

11 files changed

+358
-0
lines changed

11 files changed

+358
-0
lines changed

C++/soln-array-problems/3sum.cpp

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/**
2+
@author Farheen Bano
3+
4+
Date 11-08-2021
5+
6+
References-
7+
https://www.interviewbit.com/problems/3-sum-zero/
8+
https://leetcode.com/problems/3sum/
9+
*/
10+
11+
class Solution {
12+
public:
13+
vector<vector<int>> threeSum(vector<int>& nums) {
14+
int n=nums.size();
15+
vector<vector<int>> triplets;
16+
17+
if(n<3)
18+
return triplets;
19+
sort(nums.begin(),nums.end());
20+
21+
for (int i=0; i<n-2; i++){
22+
if(i>0 && nums[i]==nums[i-1])
23+
continue;
24+
25+
int left=i+1;
26+
int right=n-1;
27+
while(left<right){
28+
int sum=nums[i]+nums[left]+nums[right];
29+
if(sum==0){
30+
triplets.push_back({nums[i],nums[left],nums[right]});
31+
32+
left++;
33+
while(left<n && nums[left]==nums[left-1])
34+
left++;
35+
}
36+
else if(sum<0)
37+
left++;
38+
else
39+
right--;
40+
}
41+
}
42+
return triplets;
43+
}
44+
};
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/**
2+
@author Farheen Bano
3+
4+
Date 11-08-2021
5+
6+
Reference-
7+
https://leetcode.com/problems/maximum-subarray/
8+
Kadane's Algorithm
9+
*/
10+
11+
class Solution {
12+
public:
13+
int maxSubArray(vector<int>& a) {
14+
int size=a.size();
15+
int max_sum = INT_MIN;
16+
int cur_sum = 0;
17+
18+
for (int i = 0; i < size; i++){
19+
cur_sum=max(a[i],cur_sum+a[i]);
20+
max_sum=max(max_sum, cur_sum);
21+
22+
}
23+
return max_sum;
24+
}
25+
};
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/**
2+
@author Farheen Bano
3+
4+
Date 13-08-2021
5+
6+
Reference-
7+
https://leetcode.com/problems/combinations/
8+
*/
9+
10+
class Solution {
11+
public:
12+
vector<vector<int>> combine(int n, int k) {
13+
vector<vector<int>> result;
14+
vector<int> cur;
15+
possibleCombination(n,1,k,cur,result);
16+
return result;
17+
}
18+
19+
void possibleCombination(int n, int start, int remaining, vector<int>& cur, vector<vector<int>>& result){
20+
if(remaining==0)
21+
result.push_back(cur);
22+
23+
else{
24+
for(int i=start;i<=n-remaining+1;i++){
25+
if(find(cur.begin(),cur.end(),i)!=cur.end())
26+
continue;
27+
cur.push_back(i);
28+
possibleCombination(n,i+1,remaining-1,cur,result);
29+
cur.pop_back();
30+
}
31+
}
32+
}
33+
};
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/**
2+
@author Farheen Bano
3+
4+
Date 13-08-2021
5+
6+
References-
7+
https://www.interviewbit.com/problems/all-unique-permutations/
8+
https://leetcode.com/problems/permutations-ii/
9+
*/
10+
11+
class Solution {
12+
public:
13+
vector<vector<int>> permuteUnique(vector<int>& nums) {
14+
vector<vector<int>> result;
15+
vector<int> cur;
16+
17+
unordered_map<int,int> counter;
18+
for(int num:nums)
19+
counter[num]++;
20+
21+
possiblePermutation(nums,cur,counter,result);
22+
return result;
23+
}
24+
25+
void possiblePermutation(vector<int>& nums, vector<int>& cur, unordered_map<int,int> counter, vector<vector<int>>& result){
26+
if(cur.size()==nums.size())
27+
result.push_back(cur);
28+
29+
else{
30+
for(auto& element:counter) {
31+
if(counter[element.first]>0) {
32+
counter[element.first]--;
33+
cur.push_back(element.first);
34+
possiblePermutation(nums,cur,counter,result);
35+
cur.pop_back();
36+
counter[element.first]++;
37+
}
38+
}
39+
}
40+
}
41+
};
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/**
2+
@author Farheen Bano
3+
4+
Date 13-08-2021
5+
6+
References-
7+
https://www.interviewbit.com/problems/permutations/
8+
https://leetcode.com/problems/permutations/
9+
*/
10+
11+
class Solution {
12+
public:
13+
vector<vector<int>> permute(vector<int>& nums) {
14+
vector<vector<int>> result;
15+
vector<int> cur;
16+
possiblePermutation(nums,cur,result);
17+
return result;
18+
}
19+
20+
void possiblePermutation(vector<int>& nums, vector<int>& cur, vector<vector<int>>& result){
21+
if(cur.size()==nums.size())
22+
result.push_back(cur);
23+
24+
else{
25+
for(int i=0;i<nums.size();i++){
26+
if(find(cur.begin(), cur.end(), nums[i]) != cur.end())
27+
continue;
28+
cur.push_back(nums[i]);
29+
possiblePermutation(nums,cur,result);
30+
cur.pop_back();
31+
}
32+
}
33+
}
34+
};
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/**
2+
@author Farheen Bano
3+
4+
Date 13-08-2021
5+
6+
Reference-
7+
https://leetcode.com/problems/subsets-ii/
8+
*/
9+
10+
class Solution {
11+
public:
12+
vector<vector<int>> subsetsWithDup(vector<int>& nums) {
13+
sort(nums.begin(),nums.end());
14+
vector<vector<int>> result;
15+
vector<int> cur;
16+
generateSubsets(0,nums,cur,result);
17+
return result;
18+
}
19+
20+
void generateSubsets(int index, vector<int>& nums, vector<int>& cur, vector<vector<int>>& result){
21+
result.push_back(cur);
22+
23+
for(int i=index;i<nums.size();i++){
24+
if(i>index && nums[i]==nums[i-1])
25+
continue;
26+
cur.push_back(nums[i]);
27+
generateSubsets(i+1,nums,cur,result);
28+
cur.pop_back();
29+
}
30+
}
31+
};
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/**
2+
@author Farheen Bano
3+
4+
Date 13-08-2021
5+
6+
Reference-
7+
https://leetcode.com/problems/subsets/
8+
*/
9+
10+
class Solution {
11+
public:
12+
vector<vector<int>> subsets(vector<int>& nums) {
13+
vector<vector<int>> result;
14+
vector<int> cur;
15+
generateSubsets(0,nums,cur,result);
16+
return result;
17+
}
18+
19+
void generateSubsets(int index, vector<int>& nums, vector<int>& cur, vector<vector<int>>& result){
20+
result.push_back(cur);
21+
22+
for(int i=index;i<nums.size();i++){
23+
cur.push_back(nums[i]);
24+
generateSubsets(i+1,nums,cur,result);
25+
cur.pop_back();
26+
}
27+
}
28+
};
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/**
2+
@author Farheen Bano
3+
4+
Date 13-08-2021
5+
6+
Reference-
7+
https://leetcode.com/problems/generate-parentheses/
8+
*/
9+
10+
class Solution {
11+
public:
12+
vector<string> result;
13+
14+
vector<string> generateParenthesis(int n) {
15+
if(n==0)
16+
return result;
17+
solve(n,n,"");
18+
return result;
19+
}
20+
21+
void solve(int open_br, int close_br, string str){
22+
if(open_br==0 && close_br==0){
23+
result.push_back(str);
24+
return;
25+
}
26+
if(open_br!=0)
27+
solve(open_br-1,close_br,str+"(");
28+
29+
if(close_br>open_br)
30+
solve(open_br,close_br-1,str+")");
31+
}
32+
};
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/**
2+
@author Farheen Bano
3+
4+
Date 15-07-2021
5+
6+
References-
7+
https://www.geeksforgeeks.org/given-a-sequence-of-words-print-all-anagrams-together/
8+
https://leetcode.com/problems/group-anagrams/
9+
*/
10+
11+
class Solution {
12+
public:
13+
vector<vector<string>> groupAnagrams(vector<string>& strs) {
14+
vector<vector<string>> result;
15+
if (strs.size() == 0)
16+
return result;
17+
18+
unordered_map<string, vector<string>> anagrams;
19+
for (string s : strs) {
20+
string copy_s=s;
21+
sort(s.begin(),s.end());
22+
anagrams[s].push_back(copy_s);
23+
}
24+
25+
for(auto x:anagrams)
26+
result.push_back(x.second);
27+
28+
return result;
29+
}
30+
};
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/**
2+
@author Farheen Bano
3+
4+
Date 11-08-2021
5+
6+
Reference-
7+
https://leetcode.com/problems/longest-common-prefix/
8+
*/
9+
10+
class Solution {
11+
public:
12+
string longestCommonPrefix(vector<string>& strs) {
13+
if(strs.size()==0)
14+
return "";
15+
if(strs.size()==1)
16+
return strs[0];
17+
18+
string first_word=strs[0];
19+
string prefix="";
20+
21+
for(int i=0;i<first_word.size();i++){
22+
for(int j=1;j<strs.size();j++)
23+
if(i>=strs[j].size() || first_word[i]!=strs[j][i]){
24+
return prefix;
25+
}
26+
prefix=prefix+""+first_word[i];
27+
}
28+
return prefix;
29+
}
30+
};

0 commit comments

Comments
 (0)