题解 | #三数之和#
三数之和
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;
}
}



阿里云工作强度 647人发布