Skip to content

Commit 5139aff

Browse files
committed
feat: solved 15
1 parent 908f16a commit 5139aff

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

src/com/fghpdf/ThreeSum/Solution.java

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package com.fghpdf.ThreeSum;
2+
3+
import java.util.ArrayList;
4+
import java.util.Arrays;
5+
import java.util.List;
6+
7+
/**
8+
* @author fghpdf
9+
* @date 2019/11/11
10+
* https://leetcode.com/problems/3sum/
11+
*
12+
* can't to loop 3 times, it will overtime
13+
* first sort
14+
* then loop 1 time and to compute 3 numbers
15+
* if sum == 0, should eliminate same numbers
16+
* if sum < 0, lower number is too small
17+
* if sum > 0, higher number is too big
18+
**/
19+
public class Solution {
20+
public List<List<Integer>> threeSum(int[] nums) {
21+
Arrays.sort(nums);
22+
23+
List<List<Integer>> result = new ArrayList<>();
24+
for (int i = 0; i < nums.length - 2; i++) {
25+
if (i == 0 || nums[i] != nums[i - 1]) {
26+
int lower = i + 1;
27+
int higher = nums.length - 1;
28+
while (lower < higher) {
29+
if (nums[i] + nums[lower] + nums[higher] == 0) {
30+
result.add(Arrays.asList(nums[i], nums[lower], nums[higher]));
31+
// to eliminate same number
32+
while (lower < higher && nums[lower] == nums[lower+1]) {
33+
lower++;
34+
}
35+
while (lower < higher && nums[higher] == nums[higher-1]) {
36+
higher--;
37+
}
38+
lower++;
39+
higher--;
40+
} else if (nums[lower] + nums[higher] + nums[i] < 0) {
41+
lower++;
42+
} else {
43+
higher--;
44+
}
45+
}
46+
}
47+
}
48+
return result;
49+
}
50+
}

0 commit comments

Comments
 (0)