-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy paththreeSum2.js
66 lines (53 loc) · 1.79 KB
/
threeSum2.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
55
56
57
58
59
60
61
62
63
64
65
66
threeSum2 = (arr) => {
arr.sort((a,b) => {return a - b});
const result = [];
for (let indexA = 0; indexA < arr.length - 2; indexA++) {
let indexB = indexA + 1 //next element
let indexC = arr.length -1; //last index reverse
if ( indexA > 0 && arr[indexA] === arr[indexA-1]) continue // if current index equal to last index skip
while(indexB < indexC) {
let sum = arr[indexA] + arr[indexB] + arr[indexC];
if ( sum < 0) { indexB++}
else if (sum > 0) { indexC--}
else {
result.push([arr[indexA], arr[indexB], arr[indexC]]);
while(arr[indexB] === arr[indexB +1]) indexB++;
while(arr[indexC] === arr[indexC -1]) indexC--;
indexB++;
indexC--;
}
}
}
return result
}
// console.log(threeSum2([-1,0,1,2,-1,-4]));
threeSum3 = (nums) =>{
nums.sort((a,b) => a - b);
const result = [];
for (let indexA = 0; indexA < nums.length -2 ; indexA++){
const a = nums[indexA];
if(a > 0) return result;
if(a === nums[indexA - 1 ]) continue;
let indexB = indexA + 1;
let indexC = nums.length - 1;
while ( indexB < indexC ){
const b = nums[indexB]
const c = nums[indexC]
if((a+b+c) === 0) {
result.push([a,b,c]);
}
if((a+b+c) >= 0 ){
while(nums[indexC-1] === c) { indexC-- }
indexC--
}
if((a+b+c) <= 0){
while(nums[indexB+1] === b) { indexB++ }
indexB++
}
}
}
console.log(result[0],result[1])
return result;
}
// console.log(threeSum3([-1,0,1,2,-1,-4]));
threeSum3([-1,0,1,2,-1,-4])