Middle-题目121:15. 3Sum

题目原文:
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题里不知道为什么就不行。。。。。。

你可能感兴趣的:(Middle-题目121:15. 3Sum)