-
Notifications
You must be signed in to change notification settings - Fork 59
Expand file tree
/
Copy path2SumInHashing.cpp
More file actions
50 lines (47 loc) · 1.34 KB
/
2SumInHashing.cpp
File metadata and controls
50 lines (47 loc) · 1.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
//2 Sum Problem in cpp
Qn: Given an array of integers, find two numbers such that they add up to a specific target number.
Soln:
int find_index(int val, vector<int>A, int n){
for(int i=0;i<n;i++){
if(A[i]==val){
return i;
}
}
}
vector<int> Solution::twoSum(const vector<int> &A, int B) {
unordered_map<int, int>map;
int finalAns[2] = {-1,-1};
int target = B;
int n = A.size();
for(int i=0;i<n;i++){
int val = A[i];
int key = target-A[i];
if(map.find(key)==map.end()){
map.insert({val,i});
}
else{
int possAns[2] = {i, map[key]};
if(possAns[1]<possAns[0]){
int temp = possAns[0];
possAns[0] = possAns[1];
possAns[1] = temp;
}
if(finalAns[0]!=-1){
if(finalAns[1]>possAns[1] || (finalAns[1]==possAns[1] && finalAns[0]>possAns[0])){
finalAns[0] = possAns[0];
finalAns[1] = possAns[1];
}
}
else{
finalAns[0] = possAns[0];
finalAns[1] = possAns[1];
}
}
}
vector<int>ans;
if(finalAns[0]!=-1){
ans.push_back(finalAns[0]+1);
ans.push_back(finalAns[1]+1);
}
return ans;
}