leetCode算法—15. 三数之和

15. 三数之和

给你一个整数数组 nums ,判断是否存在三元组 nums\[i, numsj, numsk] 满足 i != j、i != k 且 j != k ,同时还满足 numsi + numsj + numsk == 0 。请

你返回所有和为 0 且不重复的三元组。

注意:答案中不可以包含重复的三元组。

  • 示例 1:

    输入:nums = -1,0,1,2,-1,-4

    输出:\[-1,-1,2,-1,0,1]

    解释:

    nums0 + nums1 + nums2 = (-1) + 0 + 1 = 0 。

    nums1 + nums2 + nums4 = 0 + 1 + (-1) = 0 。

    nums0 + nums3 + nums4 = (-1) + 2 + (-1) = 0 。

    不同的三元组是 -1,0,1-1,-1,2

    注意,输出的顺序和三元组的顺序并不重要。

  • 示例 2:

    输入:nums = 0,1,1

    输出:\[\]

    解释:唯一可能的三元组和不为 0 。

  • 示例 3:

    输入:nums = 0,0,0

    输出:\[0,0,0]

    解释:唯一可能的三元组和为 0 。

  • 提示:

    3 <= nums.length <= 3000

    -105 <= numsi <= 105

解法:

复制代码
const threeSum = function (nums) {
    const ans = []
    if (nums === null) return ans;
    let len = nums.length;
    if (len < 3) return ans
    nums.sort((a, b) => a - b)
    for (let i = 0; i < len; ++i) {
        if (nums[i] > 0) break;
        if (i > 0 && nums[i] == nums[i - 1]) continue; // 去重
        let left = i + 1;
        let right = len - 1;
        while (left < right) {
            const sum = nums[i] + nums[left] + nums[right]
            if (sum === 0) {
                ans.push([nums[i], nums[left], nums[right]])
                while (left < right && nums[left] == nums[left + 1]) left++; // 去重
                while (left < right && nums[right] == nums[right - 1]) right--; // 去重
                left++;
                right--;
            } else if (sum < 0) {
                left++;
            } else if (sum > 0) {
                right--;
            }

        }
    }
    return ans
};

上一篇:leetCode算法---14. 最长公共前缀

下一篇:leetCode算法---16. 最接近的三数之和

相关推荐
hansang_IR14 分钟前
【题解】[AGC020E] Encoding Subsets
c++·算法·dp
核数聚38 分钟前
【赛迪专访核数聚】深耕数据治理,打通数据孤岛夯实 AI 发展根基
大数据·人工智能·算法
小许同学记录成长1 小时前
相对辐射定标技术文档
图像处理·算法
白白白小纯1 小时前
算法篇—返回倒数第k个节点
c语言·数据结构·算法·leetcode
小羊先生car1 小时前
RTOS-F429-HAL-(动/静态)任务的创建(2026/7/27)
开发语言·算法·c#
无忧.芙桃2 小时前
数据结构之堆
c语言·数据结构·c++·算法·
Sagittarius_A*2 小时前
[LitCTF2026] lit_xor_two_story
python·算法·密码学
小蒋学算法2 小时前
算法-删除元素后最大固定点数目-典型最长增长序列算法
数据结构·算法
RD_daoyi2 小时前
Google偷偷给AI引用加了五个新功能:内联引用、悬停预览、品牌展示……但点击率真的回来了吗?
大数据·网络·人工智能·算法·安全·搜索引擎
船漏了就会沉2 小时前
后缀自动机(SAM):字符串处理的“万能瑞士军刀”
算法