LeetCode 15. 3Sum

来源:互联网 发布:淘宝违反价格法 编辑:程序博客网 时间:2024/06/05 17:44

Given an array S of n integers, are there elements abc in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.

Note: The solution set must not contain duplicate triplets.

For example, given array S = [-1, 0, 1, 2, -1, -4],A solution set is:[  [-1, 0, 1],  [-1, -1, 2]]

Subscribe to see which companies asked this question.

LeetCode经典问题:*sum问题

暴力求解是n^*的复杂度,不可取。

整体思路是先排序(nlogn),然后使用三个指针,其中一个a从头部向尾部移动,另外两个b,c在a和尾部之间做搜索,可以通过比较值或者利用set的数据结构两种方式达到去重的目的。

import java.util.*;public class Solution {    public List<List<Integer>> threeSum(int[] nums) {        List<List<Integer>> res = new ArrayList<List<Integer>>();        if(nums.length<3){            return res;        }        Arrays.sort(nums);        int len = nums.length;        for(int i=0;i<len-2;i++){            if(nums[i]>0)break;            if(i>0&&nums[i]==nums[i-1])continue;            int j=i+1,k=len-1;            while(j<k){                if(nums[i]+nums[j]+nums[k]==0){                    List<Integer>list = new ArrayList<Integer>();                    list.add(nums[i]);                    list.add(nums[j]);                    list.add(nums[k]);                    res.add(list);                    while(j<k&&nums[j]==nums[j+1])j++;                    while(j<k&&nums[k]==nums[k-1])k--;                    j++;                    k--;                }                else if(nums[i]+nums[j]+nums[k]>0){                   k--;                }                else j++;            }        }        return res;    }}


0 0
原创粉丝点击