-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path167.js
54 lines (47 loc) · 1.18 KB
/
167.js
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
51
52
53
54
// Dictionary
var twoSum = function(numbers, target) {
let dict={};
for(let i=0;i<numbers.length;i++){
let number=numbers[i];
if(dict[target-number]){
return [dict[target-number],i+1]
}
dict[number]=i+1;
}
};
// Binary search
var twoSum = function(numbers, target) {
var binSearch = (lo,hi,t)=>{
while(lo<=hi){
let mid = parseInt((lo+hi)/2);
if(numbers[mid]===t){
return mid;
}else if(numbers[mid]>t){
hi = mid-1;
}else{
lo = mid+1;
}
}
return -1;
}
for(let i=0;i<numbers.length;i++){
let temp = target-numbers[i];
//find with binary search
let res = binSearch(i+1,numbers.length-1,temp);
if(res>=0) return [i+1,res+1];
}
};
// Two-pointer
var twoSum = function(numbers, target) {
let left=0,right=numbers.length-1;
while(left<=right){
let sum = numbers[left]+ numbers[right];
if(sum===target){
return [left+1,right+1];
}else if(sum<target){
left++;
}else{
right--;
}
}
};