`

Leetcode - 4Sum

 
阅读更多
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:
Elements in a quadruplet (a,b,c,d) must be in non-descending order. (ie, a ≤ b ≤ c ≤ d)
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)
[分析] 3Sum的扩展,在3Sum外面再加一层循环,注意去重处理。

public class Solution {
    public List<List<Integer>> fourSum(int[] nums, int target) {
        List<List<Integer>> result = new ArrayList<List<Integer>>();
        if (nums == null || nums.length < 4)
            return result;
        Arrays.sort(nums);
        int N = nums.length;
        for (int i = 0; i < N - 3; i++) {
            if (i > 0 && nums[i] == nums[i - 1])
                continue;
            for (int j = i + 1; j < N - 2; j++) {
                if (j > i + 1 && nums[j] == nums[j - 1])
                    continue;
                int p = j + 1, q = N - 1;
                while (p < q) {
                    int sum4 = nums[i] + nums[j] + nums[p] + nums[q];
                    if (sum4 == target) {
                        List<Integer> item = new ArrayList<Integer>();
                        item.add(nums[i]);
                        item.add(nums[j]);
                        item.add(nums[p]);
                        item.add(nums[q]);
                        result.add(item);
                        while (++p < q && nums[p] == nums[p - 1]);
                        while (p < --q && nums[q] == nums[q + 1]);
                    } else if (sum4 > target) {
                        while (p < --q && nums[q] == nums[q + 1]);
                    } else {
                        while (++p < q && nums[p] == nums[p - 1]);
                    }
                }
            }
        }
        return result;
    }
}
分享到:
评论

相关推荐

    java-leetcode-112-path-sum

    java java_leetcode-112-path-sum

    java-leetcode-113-path-sumII

    java java_leetcode-113-path-sumII

    leetcodepython001-leetcode-problems-crawler:leetcode-问题-爬虫

    001.two-sum │  ├── information.json │  ├── README.md ├── 002.add-two-numbers │  ├── information.json │  ├── README.md ... 有一些有用的选项: Options: -r, --rule crawling rule, ...

    Algorithm-LeetCode-Solution-From-GuaZiDou.zip

    《算法——LeetCode解决方案解析》 在编程领域,算法扮演着至关重要的角色,它是程序员的智慧结晶,是解决复杂问题的高效工具。本资源“Algorithm-LeetCode-Solution-From-GuaZiDou.zip”正是围绕这个核心主题展开...

    vscode安装leetcode-leetcode-js-tdd:LeetCode勇士的简单样板

    vscode安装leetcode leetcode-js-tdd leetcode 勇士的简单样板 如何使用 克隆这个 repo 在你的 vscode 中安装 配置扩展以使用 repo 中的problems文件夹 使用1.two-sum.js案例导出解决方案 module . exports = { // ...

    离线和leetcode-leetcode-cn-cli:为leetcode-cn.com工作

    离线和leetcode leetcode-cli 一个享受 leetcode 的高效 cli 工具! 非常感谢 leetcode.com,一个非常棒的网站!...⦙⦙⦙⦙⦙⦙⦙⦙ ...'[3,2,4]\n7' Submit final solution! $ leetcode submit ./two-sum.cpp

    离线和leetcode-leetcode-cli-2.6.1:leetcode-cli-2.6.1

    离线和leetcode leetcode-cli 一个享受 leetcode 的高效 cli 工具! 非常感谢 leetcode.com,一个非常棒的网站!...⦙⦙⦙⦙⦙⦙⦙⦙ ...'[3,2,4]\n7' Submit final solution! $ leetcode submit ./two-sum.cpp

    leetcode答案-leetcode-machine-swift:Xcode中的leetcode解决方案验证

    leetcode 答案 leetcode-machine-swift :SOS_button: 请帮助在Sources/leetcode-machine-swift/leetcode.swift设置所有 leetcode 问题。 :SOS_button: 在 ...利用自动补全、类型检查......Sum " , inputs : [([ 2 , 7

    leetcode答案-leetcode:leetcode-问题

    https://leetcode-cn.com/problems/two-sum/ 难度 : 简单 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。...

    js-leetcode题解之18-4sum.js

    js js_leetcode题解之18-4sum.js

    LeetCode -- Path Sum III分析及实现方法

    LeetCode -- Path Sum III分析及实现方法 Path Sum III是LeetCode中的一个经典问题,旨在计算给定二叉树中所有路径的和等于某个给定值的路径数量。下面我们将详细介绍Path Sum III的分析及实现方法。 一、问题描述...

    leetcode-cpp刷题

    - **2.1.10 4Sum** - 在数组中找到四个数之和等于零的所有组合。 - 实现思路:类似3Sum,先排序,再通过两层循环固定两个数,使用双指针法查找另外两个数。 - **2.1.11 Remove Element** - 移除数组中所有指定...

    leetcode-master.zip

    1. "001_two_sum":这是LeetCode的第一道题目,名为“两数之和”。该问题要求在给定整数数组中找到两个元素,使得它们的和等于一个特定的目标值。你需要返回这两个元素的索引。这是一个基础的哈希表应用,通过遍历...

    leetcode-leetcode-helper:节省您为每个leetcode问题构建脚手架的时间

    leetcode 只专注于解决方案! leetcode-helper是一个单 jar 库,它使您无需为每个问题设置解决方案测试脚手架。 生成解决方案/测试框架,编译,通过一行命令进行测试。 集成了Junit ...two_sum/ │  └──

    _leetcode-python.pdf

    - 3Sum / 3Sum Closest / 4Sum: 这些题目都涉及到在数组中寻找具有特定和的数字组合,这通常需要用到双指针技术。 - Remove Nth Node From End of List: 给定一个链表,删除链表中的第n个节点。 - Valid Parentheses...

    leetcode2-leetcode-training:算法训练

    leetcode 2 leetcode-训练 算法训练。 java $: javac hello.java java $: java hello c $: gcc hello.c 如果没有错误会生成a.out 可执行文件 c $: ./a.out leetcode cli leetcode version leetcode help leetcode ...

    LeetCode-Hot-100

    例如,"Two Sum"问题要求你在数组中找到两个数,使得它们的和等于一个特定的目标值,这涉及到哈希表的使用来实现快速查找。"Merge Intervals"则要求合并重叠的区间,考察了排序和区间操作技巧。 2. **算法**:题目...

    leetcode编辑器-leetcode-question:leetcode-问题

    leetcode编辑器leetcode-问题 自定义代码演示 leetcode 编辑器配置 代码文件名: $ ! velocityTool . camelCaseName(${question ...com.shuzijun.leetcode.editor.en ...Sum ${question.titleSlug} question t

    leetcode-常见考题2.pdf

    4. **堆栈**: - 堆栈数据结构可以用于处理与括号匹配、表达式求值等相关的题目。 - 在 SumofSubarrayMinimums 题目中,堆栈可用于高效地处理连续范围内的最小值求和问题。 5. **链表**: - 链表结构常出现在...

    leetcode.3sum-leetcode-practice:算法实践

    -4] 示例输出: [ [-1, 0, 1], [-1, -1, 2] ] 首先,我最自然的想法是简单地搜索给定数组中 3 个数字的所有可能组合,并找出满足请求的组合。 这该怎么做? 我们将遍历数组中的每个元素,对于每个元素,我们将搜索其...

Global site tag (gtag.js) - Google Analytics