很多细节需要注意
- 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; } }