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

【LeetCode】【算法】15. 三数之和

LeetCode 15. 三数之和

题目描述

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请你返回所有和为 0 且不重复的三元组。
注意:答案中不可以包含重复的三元组。

思路

思路:首先可以对数组做排序Arrays.sort(nums),便于寻找合适的解

  1. 遍历三个数即可。遍历技巧为:
    I. for循环,定义i=0,遍历第一个数
    II. left=i+1作为第二个数,right=nums.length-1作为第三个数
  2. while (left < right)不断循环,分为三种条件逼近结果,实际上leftright就类似于双指针:
    I. if ((nums[i]+nums[left]+nums[right]) > 0){right--;} // 右侧逼近
    II. else if ((nums[i]+nums[left]+nums[right]) < 0) {left++;} // 左侧逼近
    III. else 保存解,同时在else中,对于重复数也可以用两个while循环去除,避免重复遍历添加重复结果

代码

class Solution {public List<List<Integer>> threeSum(int[] nums) {List<List<Integer>> list = new ArrayList<>();// 数组排序Arrays.sort(nums);if (nums[0] > 0) return list;for (int i = 0; i < nums.length; i++) {if (i > 0 && nums[i] == nums[i-1]){continue;}int left = i + 1;int right = nums.length - 1;while (left < right){if ((nums[i] + nums[left] + nums[right]) > 0){right--;} else if ((nums[i] + nums[left] + nums[right]) < 0){left++;} else {// 可以进行存储了,但是要注意去重List<Integer> t = new ArrayList<>();t.add(nums[i]);t.add(nums[left]);t.add(nums[right]);list.add(t);while (right > left && nums[right] == nums[right - 1]) right--;while (right > left && nums[left] == nums[left + 1]) left++;right--;left++;}}}return list;}
}
http://www.lryc.cn/news/482739.html

相关文章:

  • 传输协议设计与牧村摆动(Makimoto‘s Wave)
  • JMeter进阶篇
  • LabVIEW编程基础教学(一)--介绍
  • HVV蓝队基础
  • [运维][Nginx]Nginx学习(1/5)--Nginx基础
  • 创客节小学组C++模拟题
  • 阿里云ECS服务器使用限制及不允许做的事情
  • Linux开发讲课49--- Linux 启动过程分析
  • Java-03
  • 微积分复习笔记 Calculus Volume 1 - 5.3 The Fundamental Theorem of Calculus
  • c++如何绑定一个类与类内成员的关系
  • 关于解决使用VMWare内的虚拟机无法识别USB问题小结
  • 抢抓5G机遇,AORO A23防爆手机如何直击园区巡检挑战?
  • 索引【MySQL】
  • 【Allure】mac下环境配置
  • Android 开启混淆R8编译问题处理
  • Rust:GUI 开源框架
  • 移远通信亮相骁龙AI PC生态科技日,以领先的5G及Wi-Fi产品革新PC用户体验
  • 力扣每日一题 3258. 统计满足 K 约束的子字符串数量 I
  • SQL面试题——奔驰面试题
  • 24.11.10 css
  • git新手使用教程
  • 运维发展方向
  • jmeter常用配置元件介绍总结之函数助手
  • Pytorch从0复现worc2vec skipgram模型及fasttext训练维基百科语料词向量演示
  • fastapi 查询参数支持 Pydantic Model:参数校验与配置技巧
  • mysql 大数据查询
  • 如何在 Spring Boot 中利用 RocketMQ 实现批量消息消费
  • 推荐一个Star超过2K的.Net轻量级的CMS开源项目
  • 基于驾驶员面部特征的疲劳检测系统