当前位置: 首页 > news >正文

给定数组 nums,判断是否存在三个元素 a, b, c 使得 a + b + c = 0。

  1. 排序数组
    首先对数组进行升序排序,方便后续使用双指针法。
    排序的时间复杂度为 O(n log n)。
  2. 遍历数组
    遍历数组中的每个元素 nums[i],将其作为三元组中的第一个元素。
    如果当前元素与前一个元素相同(nums[i] === nums[i - 1]),跳过,避免重复三元组。
  3. 双指针查找
    使用双指针法查找剩余两个元素,使得三者之和为 0。
    left 指向当前元素右侧的第一个元素。
    right 指向数组末尾。
    通过调整 left 和 right 的位置,找到满足条件的三元组。
  4. 判断三数之和
    如果 sum === 0,找到一个符合条件的三元组,将其加入结果数组。
    为了避免重复结果,跳过相同的 left 和 right 值。
    然后移动 left 和 right 指针,继续查找。
    如果 sum < 0,说明当前和太小,需要增大 left 指针。
    如果 sum > 0,说明当前和太大,需要减小 right 指针。
function threeSum(nums) {nums.sort((a, b) => a - b);const result = [];for (let i = 0; i < nums.length - 2; i++) {if (i > 0 && nums[i] === nums[i - 1]) continue;let left = i + 1, right = nums.length - 1;while (left < right) {const sum = nums[i] + nums[left] + nums[right];if (sum === 0) {result.push([nums[i], nums[left], nums[right]]);while (nums[left] === nums[left + 1]) left++;while (nums[right] === nums[right - 1]) right--;left++;right--;} else if (sum < 0) left++;else right--;}}return result;
}

相关文章:

  • 基于vue框架的动物园饲养管理系统a7s60(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 四足机器人环境监测系统相关问题
  • 鸿蒙OSUniApp 实现登录状态管理与持久化#三方框架 #Uniapp
  • 深度学习常用概念详解:从生活理解到技术原理
  • 调不好分布式锁?HarmonyOS + Redis 分布式锁失效排查全路径
  • 32.第二阶段x64游戏实战-封包-公共call
  • [yolov11改进系列]基于yolov11引入感受野注意力卷积RFAConv的python源码+训练源码
  • 【刷题】数组拼接(超聚变暑期实习笔试)
  • GitCode镜像仓库批量下载开发实录
  • 一,关键字class和typename的区别
  • 线代第四章线性方程组第二节:线性方程组有解判断
  • 模型协同构建智能流程体
  • linux kernel 内存回收水位线调整方法
  • 《独立开发工具 • 半月刊》 第 003 期
  • java每日精进 5.27【分布式锁】
  • [网页五子棋][用户模块]客户端开发(登录功能和注册功能)
  • 《计算机组成原理》第 3 章 - 系统总线
  • 2025年- H54-Lc162--437. 路径总和 III(递归[回溯]OR深搜)--Java版
  • 24 数组基础与应用详解:定义(静态/VLA)、初始化、访问(有效/越界/内存调试)、遍历、大小端字节序
  • C++23:关键特性与最新进展深度解析
  • 成都企业网站建设价格/长春seo主管
  • 电商总监带你做网站策划/培训体系搭建
  • 淄博网站建设服务/互动营销用在哪些推广上面
  • 怎么区分模板网站/百度sem运营
  • wordpress+centos6/福州百度seo代理
  • wordpress新用户站点/推广专员