很多细节需要注意
- if(i>=1 && arr[i] == arr[i-1]) {continue;} 这块重复的继续
- while(left<right && arr[left] == arr[left-1]) left++;
while(left<right && arr[right] == arr[right+1]) right--;
这俩最开始放到了 else 的外面 但是那样会在right+1时判断出错 所以要放到里面
import java.util.*;
public class Solution {
public ArrayList<ArrayList<Integer>> threeSum(int[] num) {
ArrayList<ArrayList<Integer>> res = new ArrayList<>();
if(num == null && num.length < 3) return res;
int [] arr = num;
Arrays.sort(arr);
for(int i=0;i<arr.length-2;i++){
int left = i+1;
int right = arr.length-1;
if(i>=1 && arr[i] == arr[i-1]) {continue;}
while(left<right){
if(arr[i] + arr[left] + arr[right] > 0) right --;
else if(arr[i] + arr[left] + arr[right] < 0) left ++;
else{
res.add(new ArrayList<>(Arrays.asList(arr[i],arr[left],arr[right])));
right--;
left++;
while(left<right && arr[left] == arr[left-1]) left++;
while(left<right && arr[right] == arr[right+1]) right--;
}
}
}
return res;
}
}


京公网安备 11010502036488号