1. 首页

LeetCode 018. 四数之和

题目描述:## 题目描述:

难度:Middle

相关话题:数组哈希表双指针

给定一个包含n 个整数的数组 nums 和一个目标值 target ,判断 nums 中是否存在四个元素 a, b,cd ,使得a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。

注意:

答案中不可以包含重复的四元组。

示例:

给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。

满足要求的四元组集合为:
[
  [-1,  0, 0, 1],
  [-2, -1, 1, 2],
  [-2,  0, 0, 2]
]

思路:

时间复杂度O(N^3)3SUM的基础上增加一个循环,参考NO.15

/**
 * @来源: Javascript中文网 - 前端进阶资源教程 https://www.javascriptc.com/
 * @介绍:一个致力于帮助开发者用代码改变世界为使命的平台,每天都可以在这里找到技术世界的头条内容
 * @param {number[]} nums
 * @param {number} target
 * @return {number[][]}
 */
var fourSum = function(nums, target) {
  nums.sort((a,b)=>a-b)
  let res=[]
  for(let i=0;i<nums.length-3;i++){
    if(i>0 && nums[i]===nums[i-1])continue
    for(let j=i+1;j<nums.length-2;j++){
      if(j>i+1 && nums[j]===nums[j-1])continue
      let targ=target-(nums[i]+nums[j])
      let lo=j+1,hi=nums.length-1
      while(lo<hi){
        let sum=nums[lo]+nums[hi]
        if(sum>targ){
          hi--
        }else if(sum<targ){
          lo++
        }else{
          res.push([nums[i],nums[j],nums[lo],nums[hi]])
          while(nums[lo]===nums[lo+1])lo++
          while(nums[hi]===nums[hi-1])hi--
          lo++
          hi--
        }
      }
    }
  }
  return res
};

看完两件小事

如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:

  1. 关注我们的 GitHub 博客,让我们成为长期关系
  2. 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
  3. 关注公众号 「画漫画的程序员」,公众号后台回复「资源」 免费领取我精心整理的前端进阶资源教程

JS中文网是中国领先的新一代开发者社区和专业的技术媒体,一个帮助开发者成长的社区,目前已经覆盖和服务了超过 300 万开发者,你每天都可以在这里找到技术世界的头条内容。欢迎热爱技术的你一起加入交流与学习,JS中文网的使命是帮助开发者用代码改变世界

本文著作权归作者所有,如若转载,请注明出处

转载请注明:文章转载自「 Js中文网 · 前端进阶资源教程 」https://www.javascriptc.com

标题:LeetCode 018. 四数之和

链接:https://www.javascriptc.com/4378.html

« 如何使用 Vue3 开发小程序
LeetCode 017. 电话号码的字母组合»
Flutter 中文教程资源

相关推荐

QR code