首页 > 其他 > 详细

18. 4Sum

时间:2017-01-28 07:17:16      阅读:348      评论:0      收藏:0      [点我收藏+]

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

Note: The solution set must not contain duplicate quadruplets.

For example, given array S = [1, 0, -1, 0, -2, 2], and target = 0.

A solution set is:
[
  [-1,  0, 0, 1],
  [-2, -1, 1, 2],
  [-2,  0, 0, 2]
]

此题和three sum比较类似,求法也差不多,直接上代码:

public class Solution {

    public List<List<Integer>> fourSum(int[] nums, int target) {

        List<List<Integer>> res = new ArrayList<>();

        Arrays.sort(nums);

        for(int i=0;i<nums.length-3;i++){

            if(i!=0&&nums[i]==nums[i-1]) continue;

            for(int j=i+1;j<nums.length-2;j++){

                if(j!=i+1&&nums[j]==nums[j-1]) continue;

                int low = j+1,high = nums.length-1;

                while(low<high){

                    int sum = nums[i]+nums[j]+nums[low]+nums[high];

                    if(sum<target){

                        low++;

                    }else if(sum>target){

                        high--;

                    }else{

                        res.add(Arrays.asList(nums[i],nums[j],nums[low],nums[high]));

                        while(low<high&&nums[low]==nums[low+1]) low++;

                        while(low<high&&nums[high]==nums[high-1]) high--;

                        low++;

                        high--;

                    }

                }

            }

        }

        return res;

    }

}

18. 4Sum

原文:http://www.cnblogs.com/codeskiller/p/6354106.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!