首页 > 其他分享 >【力扣】-15. 三数之和|刷题打卡-JS

【力扣】-15. 三数之和|刷题打卡-JS

时间:2023-12-27 10:02:36浏览次数:29  
标签:15 target nums ++ 三数 示例 三元组 let 打卡

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != ji != 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

思路:

在排好序的数组里,取第一个元素为target,剩余的左(x)右(y)夹逼。target+x+y,>0时右边缩进,<0时左边缩进。当x==y相遇后,target+1

代码:

var threeSum = function(nums) {
    let arr = []
    // 直接sort()是根据字母、数字大小排序,导致-1排在-3左边
    nums.sort((a,b) => a-b)
    for (let i = 0; i < nums.length-2; i++) {
        // 当遍历下一个target与前面的相同时,跳过
        if (i > 0 && nums[i] == nums[i-1]) continue 
        let target = nums[i], x = i + 1, y = nums.length - 1 
        while (x < y) {
            let sum = target + nums[x] + nums[y]
            if (sum == 0) {
                arr.push([target, nums[x], nums[y]])
                // 准备夹逼前,将左右俩边移到相同数值最紧处
                while (x < y && nums[x+1] == nums[x]) x++
                while (x < y && nums[y-1] == nums[y]) y--
                // 有了上述的准备过程,这里夹逼时,左右俩边数值与上次数值不同
                x++
                y--
            } else if (sum > 0) {
                y--
            } else {
                x++
            }
        }
    }
    return arr
};

标签:15,target,nums,++,三数,示例,三元组,let,打卡
From: https://blog.51cto.com/u_16101563/8995137

相关文章

  • 接口请求响应码415报错信息UNSUPPORTED_MEDIA_TYPE问题记录
    场景描述开发了一个Post类型的接口,在本地用postman测试是没有问题。前端调用返回415UNSUPPORTED_MEDIA_TYPE。而415UnsupportedMediaType是一种HTTP协议的错误状态代码,表示服务器由于不支持其有效载荷的格式,从而拒绝接受客户端的请求后面定位问题发现,后端接口请求参数使用@......
  • [NOI2015] 寿司晚宴
    P2150[NOI2015]寿司晚宴翻译一下,题目其实就是给你\(2-n\)这些数,从其中选出两个集合(可以为空),求使两个集合中的数两两互质的方案数。那么就相当于说两个集合中的数的质因数的集合不能有重合。先看前\(\%30\)的数据,\(n<=30\),里面的质因数不多,考虑状压\(DP\)。我们不妨设\(DP[i]......
  • gym103415A Math Ball
    套路生成函数。写出答案的式子,设\(f_i(x)=\sumj^{c_i}x^j\),不难得到答案为:\[[x^W]{1\over1-x}\prod_{i=1}^nf_i(x)\]考虑求\(f_i(x)\)。看到指数上有\(c_i\),想到用斯特林数展开:\[f_i(x)=\sum_{j=0}^{\infty}x^j\sum_{k=0}^{c_i}{c_i\bracek}\binom{j}{k}k!\]\[=\s......
  • 软件设计15
    [实验任务一]:财务审批某物资管理系统中物资采购需要分级审批,主任可以审批1万元及以下的采购单,部门经理可以审批5万元及以下的采购单,副总经理可以审批10万元及以下的采购单,总经理可以审批20万元及以下的采购单,20万元以上的采购单需要开职工大会确定。现用职责链模式设计该系统。......
  • Redis设计与实现-15.复制
    redis可以通过SLAVEOF命令去复制(同步)另一台服务器,例如:当前有两台redis服务器其信息为:hostnameipportredis_1127.0.0.16379redis_2127.0.0.112345如果redis_2想要同步redis_1的内容,可以在redis_2上执行SLAVEOF127.0.0.16379,进而达到这个效果。RedisSLA......
  • Codeforces Round 915 (div2) E
    E.TreeQueries[题目链接](https://codeforces.com/contest/1904/problem/EProblem-E-Codeforces)题意概括:给定一棵大小为\(n\)的树,回答如下询问,询问之间相互独立:给定一个点\(x\)与\(k\)个点\(a_i\),求出从\(x\)出发不经过任何一个\(a_i\)的最长简单路径长度......
  • S71500 OPCUA 通讯
    S71500OPCUA通讯(PLC作为OPCUAServer)测试工具:1,博图V172,PLCSIMAdvanced3.03,OPCUAClient测试步骤:博图中的设置1,在博图中新建项目,组态设备,这里要注意,PLCSIMAdvanced3.0支持的CPU版本最高只能到2.8,因此版本选择2.8就可以了2,在项目视图的设备组态中,把这几个地方勾上 3,运行系......
  • 【力扣】-1672. 最富有客户的资产总量|刷题打卡-JS
    给你一个 mxn 的整数网格 accounts ,其中 accounts[i][j] 是第 i 位客户在第 j 家银行托管的资产数量。返回最富有客户所拥有的 资产总量 。客户的 资产总量 就是他们在各家银行托管的资产数量之和。最富有客户就是 资产总量 最大的客户。示例1:第1位客户的资产......
  • Cisco Expressway Release X15.0.0 - 统一通信网关
    CiscoExpresswayReleaseX15.0.0-统一通信网关Expressway&ExpresswaySelect请访问原文链接:https://sysin.org/blog/cisco-expressway-15/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgCiscoExpressway系列让协作变得更简单CiscoExpressway可在保证......
  • Cisco Unified Communications Manager (CallManager) 15.0 - 统一通信与协作
    CiscoUnifiedCommunicationsManager(CallManager)15.0-统一通信与协作思科统一通信管理器(CallManager)请访问原文链接:https://sysin.org/blog/cisco-ucm-15/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org思科统一通信管理器企业统一通信和协作借助思科......