目录

leetCode算法—15. 三数之和

15. 三数之和

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

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

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

  • 示例 1:

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

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

    解释:

    nums[0] + nums[1] + nums[2] = (-1) + 0 + 1 = 0 。

    nums[1] + nums[2] + nums[4] = 0 + 1 + (-1) = 0 。

    nums[0] + nums[3] + nums[4] = (-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 <= nums[i] <= 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. 最接近的三数之和

本文是转载文章,点击查看原文
如有侵权,请联系 xyy@jishuzhan.net 删除
相关推荐
孤蓬&听雨8 分钟前
Axure高保真AI算法训练平台
人工智能·算法·ai·产品经理·axure·原型设计
敲上瘾24 分钟前
高并发内存池(四):内存释放原理与实现
c++·算法·缓存·线程·高并发内存池·池化技术
tkevinjd2 小时前
并查集(力扣1971)
算法·leetcode·图论·并查集
Dovis(誓平步青云)2 小时前
【数据结构】励志大厂版·初阶(复习+刷题):线性表(顺序表)
c语言·数据结构·经验分享·笔记·学习·算法·学习方法
是Dream呀2 小时前
深度学习算法:从基础到实践
人工智能·深度学习·算法
Y1nhl2 小时前
搜广推校招面经七十五
人工智能·深度学习·算法·机器学习·支持向量机·推荐算法·搜索算法
Brookty3 小时前
【算法】归并排序
数据结构·算法·排序算法
星星火柴9365 小时前
数据结构:哈希表 | C++中的set与map
数据结构·c++·笔记·算法·链表·哈希算法·散列表
CS创新实验室7 小时前
数据结构:最小生成树的普里姆算法和克鲁斯卡尔算法
数据结构·算法·图论·计算机考研
西贝爱学习9 小时前
数据结构:C语言版严蔚敏和解析介绍,附pdf
c语言·开发语言·数据结构