Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit00e6bad

Browse files
committed
update: 015
1 parent37f50b9 commit00e6bad

File tree

2 files changed

+31
-17
lines changed

2 files changed

+31
-17
lines changed

‎note/015/README.md

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,27 +21,34 @@ A solution set is:
2121

2222
##思路
2323

24-
题意是让你从数组中找出所有三个和为 0 的元素构成的非重复序列,这样的话我们可以把数组先做下排序,然后遍历这个排序数组,用两个指针分别指向当前元素的下一个和数组尾部,判断三者的和与 0 的大小来移动两个指针,其中细节操作就是注意去重
24+
题意是让你从数组中找出所有三个和为 0 的元素构成的非重复序列,这样的话我们可以把数组先做下排序,然后遍历这个排序数组,用两个指针分别指向当前元素的下一个和数组尾部,判断三者的和与 0 的大小来移动两个指针,其中细节操作就是优化和去重
2525

2626
```java
2727
classSolution {
2828
publicList<List<Integer>>threeSum(int[]nums) {
29-
Arrays.sort(nums);
3029
List<List<Integer>> list=newArrayList<>();
31-
int i=0;
32-
while (i< nums.length-2) {
30+
int len= nums.length;
31+
if (len<3)return list;
32+
Arrays.sort(nums);
33+
int max= nums[len-1];
34+
if (max<0)return list;
35+
for (int i=0; i< len-2; ) {
3336
if (nums[i]>0)break;
34-
int left= i+1, right= nums.length-1;
37+
if (nums[i]+2* max<0) {
38+
while (nums[i]== nums[++i]&& i< len-2) ;
39+
continue;
40+
}
41+
int left= i+1, right= len-1;
3542
while (left< right) {
3643
int sum= nums[i]+ nums[left]+ nums[right];
3744
if (sum==0) {
38-
list.add(Arrays.asList(nums[i], nums[left++], nums[right--]));
39-
while (left< right&&nums[left]== nums[left-1])++left;
40-
while (left< right&&nums[right]== nums[right+1])--right;
45+
list.add(Arrays.asList(nums[i], nums[left], nums[right]));
46+
while (nums[left]== nums[++left]&& left< right);
47+
while (nums[right]== nums[--right]&& left<right);
4148
}elseif (sum<0)++left;
4249
else--right;
4350
}
44-
while (nums[i]== nums[++i]&& i<nums.length-2) ;
51+
while (nums[i]== nums[++i]&& i<len-2) ;
4552
}
4653
return list;
4754
}

‎src/com/blankj/medium/_015/Solution.java

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,22 +14,29 @@
1414
*/
1515
publicclassSolution {
1616
publicList<List<Integer>>threeSum(int[]nums) {
17-
Arrays.sort(nums);
1817
List<List<Integer>>list =newArrayList<>();
19-
inti =0;
20-
while (i <nums.length -2) {
18+
intlen =nums.length;
19+
if (len <3)returnlist;
20+
Arrays.sort(nums);
21+
intmax =nums[len -1];
22+
if (max <0)returnlist;
23+
for (inti =0;i <len -2; ) {
2124
if (nums[i] >0)break;
22-
intleft =i +1,right =nums.length -1;
25+
if (nums[i] +2 *max <0) {
26+
while (nums[i] ==nums[++i] &&i <len -2) ;
27+
continue;
28+
}
29+
intleft =i +1,right =len -1;
2330
while (left <right) {
2431
intsum =nums[i] +nums[left] +nums[right];
2532
if (sum ==0) {
26-
list.add(Arrays.asList(nums[i],nums[left++],nums[right--]));
27-
while (left <right &&nums[left] ==nums[left -1]) ++left;
28-
while (left <right &&nums[right] ==nums[right +1]) --right;
33+
list.add(Arrays.asList(nums[i],nums[left],nums[right]));
34+
while (nums[left] ==nums[++left] &&left <right);
35+
while (nums[right] ==nums[--right] &&left <right);
2936
}elseif (sum <0) ++left;
3037
else --right;
3138
}
32-
while (nums[i] ==nums[++i] &&i <nums.length -2) ;
39+
while (nums[i] ==nums[++i] &&i <len -2) ;
3340
}
3441
returnlist;
3542
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp