`

Leetcode - 3 Sum

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

Note:
Elements in a triplet (a,b,c) must be in non-descending order. (ie, a ≤ b ≤ c)
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)

[分析] Two Sum的扩展版,排序输入数组,遍历数组求解。遍历 nums[k]时,找出下标 k 后面所有加和为 -nums[k]的pair,因为数组已排序,可使用两指针从两端往中间夹逼的技巧求解 two sum。注意到 k 只需遍历到相应数组元素为0时即可停止,因为三个正数的和不可能是0,另外遍历时需要跳过重复元素。

public class Solution {
    public List<List<Integer>> threeSum(int[] nums) {
        List<List<Integer>> result = new ArrayList<List<Integer>>();
        if (nums == null || nums.length < 3)
            return result;
        Arrays.sort(nums);
        int N = nums.length;
        for (int k = 0; k < N - 2 && nums[k] <= 0; k++) {
            if (k > 0 && nums[k] == nums[k - 1])
                continue;
            int i = k + 1, j = N - 1;
            while ( i < j) {
                int sum2 = nums[i] + nums[j];
                if (sum2 == -nums[k]) {
                    List<Integer> item = new ArrayList<Integer>();
                    item.add(nums[k]);
                    item.add(nums[i]);
                    item.add(nums[j]);
                    result.add(item);
                    while (++i < j && nums[i] == nums[i - 1]);
                    while (i <--j && nums[j] == nums[j + 1]);
                } else if (sum2 < -nums[k]) {
                    while (++i < j && nums[i] == nums[i - 1]);
                } else {
                    while (i <--j && nums[j] == nums[j + 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勇士的简单样板

    3 ] } , ] , } npm start 特征 忽视问题 如果导出ignore: true则可以忽略问题 测试无序结果 如果要求您提供一系列没有特定顺序的解决方案,您可以使用辅助方法来测试您的功能。 参见49.group-anagrams.js

    离线和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,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。...

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

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

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

    3sum leetcode-练习 算法实践 15. 3和 给定一个由 n 个整数组成的数组 nums,nums 中是否有元素 a、b、c 使得 a + b + c = 0? 在数组中找到所有唯一的三元组,其总和为零。 示例输入: [-1, 0, 1, 2, -1, -4] 示例...

    C语言-leetcode题解之15-3sum.c

    c语言入门 C语言_leetcode题解之15-3sum.c

    leetcode-cpp刷题

    - 实现思路:类似3Sum,先排序,再通过两层循环固定两个数,使用双指针法查找另外两个数。 - **2.1.11 Remove Element** - 移除数组中所有指定的元素。 - 实现思路:使用双指针,一个指针遍历数组,另一个指针...

    js-leetcode题解之16-3sum-closest.js

    js js_leetcode题解之16-3sum-closest.js

    js-leetcode题解之15-3sum.js

    js js_leetcode题解之15-3sum.js

    leetcode-master.zip

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

    leetcode2-leetcode-training:算法训练

    leetcode 2 leetcode-训练 算法训练。 java $: javac hello.java java ...leetcode ...leetcode ...leetcode ...leetcode ...leetcode ...leetcode ...leetcode ...leetcode ...leetcode ...leetcode ...1.two-sum.cpp ...'[1,2,3]\n3'

    _leetcode-python.pdf

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

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

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

    LeetCode-Hot-100

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

Global site tag (gtag.js) - Google Analytics