题解 | #三数之和#
三数之和
http://www.nowcoder.com/practice/345e2ed5f81d4017bbb8cc6055b0b711
import java.util.*;
public class Solution {
public ArrayList<ArrayList<Integer>> threeSum(int[] num) {
ArrayList<ArrayList<Integer>> ans = new ArrayList<>();
continue;
}
ArrayList<Integer> list = new ArrayList<>();
list.add(num[left]);
list.add(num[right]);
list.add(number);
ans.add(list);
left++;
right--;
}
}
}
return ans;
}
}
public class Solution {
public ArrayList<ArrayList<Integer>> threeSum(int[] num) {
ArrayList<ArrayList<Integer>> ans = new ArrayList<>();
Arrays.sort(num);
//记录上一次值
int number = -200;
for(int i = 0;i<num.length;i++){
//如果当前值和上一次值重复直接跳过
if(num[i] == number){continue;
}
number = num[i];
//双指针
int left = i+1,right = num.length-1;
while(left<right){
//相等时,将值加入数组,双指针移动
if(num[left] + num[right] + number == 0){ArrayList<Integer> list = new ArrayList<>();
list.add(num[left]);
list.add(num[right]);
list.add(number);
ans.add(list);
left++;
right--;
//判断移动后的指针与前面是否相同,若相同一直移动
while(left<right && num[left] == num[left-1]) left++;
while(left<right && num[right] == num[right+1]) right--;
//小于零左指针右移
}else if(num[left] + num[right] + number < 0){
left++;
//大于零右指针左移
}else{right--;
}
}
}
return ans;
}
}