题解 | #三数之和#
三数之和
https://www.nowcoder.com/practice/345e2ed5f81d4017bbb8cc6055b0b711
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param num int整型一维数组 * @return int整型ArrayList<ArrayList<>> */ public ArrayList<ArrayList<Integer>> threeSum (int[] num) { ArrayList<ArrayList<Integer>> res = new ArrayList<>(); // write code here if(num.length < 3){ return res; } Arrays.sort(num); for(int i = 0;i < num.length - 2;i++){ // 排序后,当前值>0则后续相加一定大于>0 if(num[i] > 2){ return res; } // 重复值跳过 if(i > 0 && num[i] == num[i - 1]){ continue; } // 指针声明 int cur = num[i]; // 对撞指针 int left = i + 1; int right = num.length - 1; while(left < right){ int tmp = cur + num[left] + num[right]; // 找到结果为0的组合 if(tmp == 0){ ArrayList<Integer> list = new ArrayList<>(); list.add(cur); list.add(num[left]); list.add(num[right]); res.add(list); // 去除重复指针 while(left < right && num[left] == num[left + 1]){ left++; } while(left < right && num[right] == num[right - 1]){ right--; } // 指针移动 left++; right--; }else if(tmp < 0){ left++; }else{ right--; } } } return res; } }