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

【力扣】第15题:三数之和

原文链接:15. 三数之和 - 力扣(LeetCode)

思路解析

双指针:

        (1)头尾指针对应值相加如果大于目标值(target),那么只能尾指针-1;如果小于target,那么只能头指针+1。

        (2)如何去除重复?因为已经排好序了,如果下一个要检索的值等于前一个检索的值,直接跳过。

    public List<List<Integer>> threeSum(int[] nums) {/*** 双指针:* 头指针:开始指向当前元素的下一个元素* 尾指针:开始指向最后一个元素*/Arrays.sort(nums);int len = nums.length;List<List<Integer>> ans = new ArrayList<>();for (int i = 0; i < nums.length; i++) {if (i > 0 && nums[i] == nums[i - 1]) continue;int j = i + 1;int k = len - 1;int x = nums[i];while(j<k){int result = x+nums[j]+nums[k];if(result>0){k--;}else if(result<0){j++;}else {ans.add(Arrays.asList(x,nums[j],nums[k]));j++;//继续排查当前遍历的i,还有没有别的组合while(nums[j]==nums[j-1] && j<k){j++;}k--;while(nums[k]==nums[k+1] && j<k){k--;}}}}return ans;}

两个优化:

        优化1:如果最小的三个值相加都大于0,那么没有满足要求 的,直接break

        优化2:如果当前值和最大的两个值相加都小于0,那么本次遍历的i没有满足要求的,直接continue

    public List<List<Integer>> threeSum(int[] nums) {Arrays.sort(nums);int len = nums.length;List<List<Integer>> ans = new ArrayList<>();for (int i = 0; i < nums.length; i++) {if (i > 0 && nums[i] == nums[i - 1]) continue;int j = i + 1;int k = len - 1;int x = nums[i];if(x+nums[j]+nums[j+1] > 0) break;//优化1if(x+nums[k]+nums[k-1] < 0) continue;//优化2while(j<k){int result = x+nums[j]+nums[k];if(result>0){k--;}else if(result<0){j++;}else {ans.add(Arrays.asList(x,nums[j],nums[k]));j++;//继续排查当前遍历的i,还有没有别的组合while(nums[j]==nums[j-1] && j<k){j++;}k--;while(nums[k]==nums[k+1] && j<k){k--;}}}}return ans;}

同样的思路,会做这一题,你就会两数之和了,两数之和也是用这个思想,更简单

1. 两数之和 - 力扣(LeetCode)

 

http://www.xdnf.cn/news/16228.html

相关文章:

  • C# 继承 虚方法
  • idea部署新项目时,用自定义的maven出现的问题解决
  • QMC5883L 坐标系Z轴是垂直于芯片平面向下(芯片朝上时指向地面)还是垂直于芯片平面向上(芯片朝上时指向天空)
  • Qt内存管理的核心点
  • 游戏盾 在线游戏的终极防护屏障
  • 【2025目标检测】最新论文
  • 2025年Zigbee技术白皮书:全球物联网无线通信的关键创新
  • 深度学习的Logits:logist 是什么,上一维度的隐藏向量怎么获取
  • 基于GitHub的Terraform自动化管理最佳实践
  • rust嵌入式开发零基础入门教程(四)
  • 第一章:Go语言基础入门之Hello World与Go程序结构
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 主页-微博点赞量Top6实现
  • Https以及CA证书
  • 基于php的校园招聘平台
  • SpringCloud seata全局事务
  • Matlab学习笔记:逻辑基础
  • 【数学建模 | Matlab】二维绘图 和 三维绘图
  • CLI 与 IDE 编码代理比较:提升开发效率的两种路径
  • 使用Docker搭建SearXNG搜索引擎
  • 直播一体机技术方案解析:基于RK3588S的硬件架构特性​
  • 地理类专业选择指南:地理科学/测绘工程/遥感科学与技术
  • 基于LNMP分布式个人云存储
  • Docker详解及实战
  • 274款古装人物头像
  • 20250704-基于强化学习在云计算环境中的虚拟机资源调度研究
  • DeepSeek 助力 Vue3 开发:打造丝滑的日历(Calendar),日历_家庭维护示例(CalendarView01_31)
  • 性能测试-jmeter实战5
  • 【无标题】word 中的中文排序
  • 字节 AI 编辑器 Trae 2.0 SOLO 出道! 国际版不充分指南及与国内版的对比
  • 腾讯云推出CodeBuddy:革新AI全栈开发体验