美文网首页ACM题库~
LeetCode 18. 4Sum

LeetCode 18. 4Sum

作者: 关玮琳linSir | 来源:发表于2017-09-12 14:24 被阅读7次

    Given an array S of n integers, are there elements a, b, c, 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]
    ]
    

    在三阶的基础上,稍作修改,多加一层for循环就行,不要想着暴力的求解,会超时的。

    java代码:

    class Solution {
        public List<List<Integer>> fourSum(int[] nums, int target) {
    
            Arrays.sort(nums);
            List<List<Integer>> result = new ArrayList<>();
    
            for (int i = 0; i < nums.length - 3; i++) {
                for (int j = i + 1; j < nums.length - 2; j++) {
                    List<Integer> list;
                    int lo = j + 1, hi = nums.length - 1, temp = target - (nums[i] + nums[j]);
                    while (lo < hi) {
                        if (nums[lo] + nums[hi] > temp) {
                            hi--;
                        } else if (nums[lo] + nums[hi] < temp) {
                            lo++;
                        } else {
                            list = new ArrayList<>(4);
                            list.add(nums[i]);
                            list.add(nums[j]);
                            list.add(nums[lo]);
                            list.add(nums[hi]);
                            result.add(list);
                            while (lo < hi && nums[lo] == nums[lo + 1]) lo++;
                            while (hi > lo && nums[hi] == nums[hi - 1]) hi--;
                            lo++;
                            hi--;
                        }
                    }
                    while (j < nums.length - 2 && nums[j] == nums[j + 1]) {
                        j++;
                    }
                }
                while (i < nums.length - 3 && nums[i] == nums[i + 1]) i++;
            }
            return result;
        }
    }
    

    相关文章

      网友评论

        本文标题:LeetCode 18. 4Sum

        本文链接:https://www.haomeiwen.com/subject/nfycsxtx.html