> LeetCode18. 四数之和 - Yuyy
Yuyy
Yuyy
LeetCode18. 四数之和

一、思路

分治:将问题拆解为两数之和加第三个数和第四个数

二、问题

给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。

注意:

答案中不可以包含重复的四元组。

示例:

给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。

满足要求的四元组集合为:
[
  [-1,  0, 0, 1],
  [-2, -1, 1, 2],
  [-2,  0, 0, 2]
]
Related Topics
  • 数组
  • 哈希表
  • 双指针
  • \n

  • 👍 758
  • 👎 0
  • 三、代码

    public List<List<Integer>> fourSum(int[] nums, int target) {
                List<List<Integer>> ans = 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 left = j + 1;
                        int right = nums.length - 1;
                        while (left < right) {
                            int sum = nums[i] + nums[j] + nums[left] + nums[right];
                            if (sum > target) {
                                right--;
                            } else if (sum < target) {
                                left++;
                            } else {
                                ArrayList<Integer> list = new ArrayList<>();
                                list.add(nums[i]);
                                list.add(nums[j]);
                                list.add(nums[left]);
                                list.add(nums[right]);
                                ans.add(list);
                                while (left < right && nums[left] == nums[++left]) {
                                }
                                while (left < right && nums[right] == nums[--right]) {
                                }
                            }
                        }
                    }
                }
                return ans;
            }
    

    发表评论

    textsms
    account_circle
    email

    Yuyy

    LeetCode18. 四数之和
    一、思路 分治:将问题拆解为两数之和加第三个数和第四个数 二、问题 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a +…
    扫描二维码继续阅读
    2021-02-28
    友情链接
    标签
    归档
    近期文章