Skip to content

Commit a0d8aa1

Browse files
Merge pull request chihungyu1116#10 from ignacio-chiazzo/closest-sum
3 Sum closest
2 parents 42b77db + 0ab6459 commit a0d8aa1

File tree

3 files changed

+103
-8
lines changed

3 files changed

+103
-8
lines changed

16 3Sum Closest.js

Lines changed: 38 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ var threeSumClosest = function(nums, target) {
77
if(nums === null || nums.length < 2){
88
return null;
99
}
10-
10+
1111
if(nums.length === 3){
1212
return nums.reduce(function(prev,cur){return prev + cur;});
1313
}
@@ -16,34 +16,64 @@ var threeSumClosest = function(nums, target) {
1616
var closest = Infinity;
1717

1818
nums.sort(function(a,b){return a > b ? 1 : -1;});
19-
19+
2020
for(var i = 0; i < nums.length; i++){
2121
var j = i + 1;
2222
var k = nums.length - 1;
2323
while(j < k){
2424
var sum = nums[j] + nums[k] + nums[i];
2525
var diff = sum - target;
26-
26+
2727
if(diff === 0){
2828
return sum;
2929
}
30-
30+
3131
if(sum < target){
3232
diff = target - sum;
3333
j++;
3434
} else {
3535
diff = sum - target;
3636
k--
3737
}
38-
38+
3939
if(diff < closest){
4040
closest = diff;
4141
result = sum;
4242
}
4343
}
44-
44+
4545
while(i < (nums.length-1) && nums[i] === nums[i+1]) i++;
4646
}
47-
47+
4848
return result;
49-
};
49+
};
50+
51+
//Shorter solution
52+
var threeSumClosest = function(nums, target) {
53+
var closest = Number.Infinity;
54+
var gap = -1;
55+
56+
nums.sort(function(a, b) { return a - b });
57+
for(var i = 0; i < nums.length - 2; i++) {
58+
var low = i + 1;
59+
var high = nums.length - 1;
60+
61+
while(low < high) {
62+
var sum = nums[i] + nums[low] + nums[high];
63+
partialGap = Math.abs(target - sum);
64+
if(partialGap < gap || gap === -1) {
65+
gap = partialGap;
66+
closest = sum;
67+
}
68+
69+
if(sum === target) {
70+
return target;
71+
} else if (sum < target) {
72+
low++;
73+
} else {
74+
high--;
75+
}
76+
}
77+
}
78+
return closest;
79+
};

18. 4Sum.js

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/**
2+
* @param {number[]} nums
3+
* @param {number} target
4+
* @return {number[][]}
5+
*/
6+
var fourSum = function(nums, target) {
7+
var results = [];
8+
nums.sort(function(a,b) { return a - b });
9+
for(var i = 0; i < nums.length - 3; i++) {
10+
while(i > 0 && i < nums.length - 3 && nums[i] === nums[i - 1]) {
11+
i++;
12+
}
13+
for(var j = i + 1; j < nums.length - 2; j++) {
14+
while(j > i + 1 && j < nums.length - 2 && nums[j] === nums[j - 1]) {
15+
j++;
16+
}
17+
var low = j + 1;
18+
var high = nums.length - 1;
19+
var newTarget = target - (nums[i] + nums[j]);
20+
while(low < high) {
21+
partialSum = nums[low] + nums[high];
22+
if(partialSum === newTarget) {
23+
results.push([nums[i], nums[j], nums[low], nums[high]]);
24+
high--;
25+
low++;
26+
while(low < high && nums[low] === nums[low - 1]) {
27+
low++;
28+
}
29+
while(low < high && nums[high] === nums[high + 1]) {
30+
high--;
31+
}
32+
} else if (partialSum > newTarget) {
33+
high--;
34+
} else {
35+
low++;
36+
}
37+
}
38+
}
39+
}
40+
return results;
41+
};

532. K-diff Pairs in an Array.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
var findPairs = function(nums, k) {
2+
if(nums.length === 0 || k < 0) {
3+
return 0;
4+
}
5+
var dict = {};
6+
var count = 0;
7+
8+
nums.sort(function(a,b){ return a - b });
9+
for(var i = 0; i < nums.length; i++) {
10+
var number = nums[i];
11+
dict[number] = (dict[number] === undefined)? 1 : dict[number] += dict[number];
12+
}
13+
for(var numb in dict) {
14+
numb = parseInt(numb);
15+
if(k === 0) {
16+
if(dict[numb] > 1) {
17+
count++;
18+
}
19+
} else if(dict[numb + k] !== undefined){
20+
count++;
21+
}
22+
}
23+
return count;
24+
};

0 commit comments

Comments
 (0)