题解 | #三数之和#
三数之和
https://www.nowcoder.com/practice/345e2ed5f81d4017bbb8cc6055b0b711
import java.util.*;
public class Solution {
public ArrayList<ArrayList<Integer>> threeSum(int[] num) {
ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
if (num.length < 3) {
return res;
}
// 数组从小到大排序
Arrays.sort(num);
for (int i = 0; i < num.length; i++) {
if (num[i] >0) {
return res;
}
if ((i >0 && num[i] == num[i-1])) {
continue; //去重
}
int left = i + 1;
int right = num.length - 1;
while (left < right) {
if (num[i] + num[left] + num[right] == 0) {
ArrayList<Integer> temp = new ArrayList<Integer>();
temp.add(num[i]);
temp.add(num[left]);
temp.add(num[right]);
res.add(temp);
while (left < right && num[left] == num[left+1]) {
left++;
}
while (left < right && num[right] == num[right-1]) {
right--;
}
left++;
right--;
} else if (num[i] + num[left] + num[right] <0) {
left++;
}else {
right--;
}
}
}
return res;
}
}
#牛客网在线编程#
public class Solution {
public ArrayList<ArrayList<Integer>> threeSum(int[] num) {
ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
if (num.length < 3) {
return res;
}
// 数组从小到大排序
Arrays.sort(num);
for (int i = 0; i < num.length; i++) {
if (num[i] >0) {
return res;
}
if ((i >0 && num[i] == num[i-1])) {
continue; //去重
}
int left = i + 1;
int right = num.length - 1;
while (left < right) {
if (num[i] + num[left] + num[right] == 0) {
ArrayList<Integer> temp = new ArrayList<Integer>();
temp.add(num[i]);
temp.add(num[left]);
temp.add(num[right]);
res.add(temp);
while (left < right && num[left] == num[left+1]) {
left++;
}
while (left < right && num[right] == num[right-1]) {
right--;
}
left++;
right--;
} else if (num[i] + num[left] + num[right] <0) {
left++;
}else {
right--;
}
}
}
return res;
}
}
#牛客网在线编程#