题目原文:
Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.
题目大意:
给出一个数组s,求三元组(a,b,c),其中a,b,c∈s且a+b+c=0。
题目分析:
典型的ksum问题,不求原数组下标,所以排序后固定一个指针即可。
源码:(language:java)
public class Solution {
public List<List<Integer>> threeSum(int[] nums) {
Arrays.sort(nums);
List<List<Integer>> list = new LinkedList<List<Integer>>();
for(int i = 0;i<nums.length-2;i++) {
if(i>0 && nums[i]==nums[i-1])
continue;
int j=i+1,k=nums.length-1;
while(j<k) {
if(j>i+1 && nums[j]==nums[j-1]) {
j++;
continue;
}
if(k<nums.length-1&&nums[k]==nums[k+1]) {
k--;
continue;
}
int sum = nums[i]+nums[j]+nums[k];
if(sum==0) {
List<Integer> sublist = new LinkedList<Integer>();
sublist.add(nums[i]);
sublist.add(nums[j]);
sublist.add(nums[k]);
list.add(sublist);
j++;
}
else if(sum>0) {
k--;
}
else {
j++;
}
}
}
return list;
}
}
成绩:
9ms,beats 34.07%,众数8ms,31.75%
Cmershen的碎碎念:
本题解决了重复数字的问题,确保解集中没有重复元素。但同样的去重逻辑放到4sum题里不知道为什么就不行。。。。。。