• 这算是小总结吧,代码啥的大体上跟大家的一样,只不过我认为官方应该多一个保证不同的操作(反正是通过了,就姑且当我的想法对吧)(明明四数值和官方都进行了保证重复操作,而三个竟然没有都进行,我不理解。)
  • 还是,找几个数的和等于某数,就一定会用到目标数-第一个=剩下两个数的和
  • 为了不重复,需要进行排序
  • 第二个数和第三个数的寻找可以通过使用双指针,一个从先往后,另一个当两数之和大于目标-第一个数的时候,从后往前进行寻找(因为总和一定,一个数大,另一个数必然减小),这样节省了一个循环呢!第三个数一定比第二个数大,否则也不会存在了!
  • 不同中最经典的情况就是0,0,0,0,0了,这结果只能是000,而不从五个零中任意取出3个零,所以要保证,每次选取的数字都是不同的
  • 严格意义上来说,这个保证每个元素不相同是在存入到输出的集合之后保证的或已经有一个数的前提下才行,如果一开始就保证,那么当0,0,0,0,0就一般是错误的解(类似的错误还有很多),所以first是大于0而不是从0开始,second也是从first+2开始,这些都是为了保证起码有一个数,不然可能就直接没了。
  • 其实压入之前去重和压入之后去重都一样,只不过,压入之前去重需要保证至少有一个会压入(也就是不从头开始,从第二个开始);而压入之后去重则没有这么多考虑,或者说,这其实与循环有关,本身用for进行循环的时候,用if搞去重,没有for之后就得自己想办法去重,自然形式也不一样,也就不用苛求用同一种方法进行去重
    • // 只是用first举个例子,其实是三个都需要保证取的下一个元素是不重复的

      if (first > 0 && nums[first] == nums[first - 1]) {

      continue;

      }

      if (second > first + 1 && nums[second] == nums[second - 1]) {

      continue;

      }

  • 当第二个数与第三个数相等的时候,结束。
 import java.util.*;class Solution {public List<List<Integer>> threeSum(int[] nums) {int n = nums.length;// 从小到大进行排序Arrays.sort(nums);List<List<Integer>> ans = new ArrayList<List<Integer>>();// 枚举 afor (int first = 0; first < n; first++) {// 需要和上一次枚举的数不相同if (first > 0 && nums[first] == nums[first - 1]) {continue;}// c 对应的指针初始指向数组的最右端int third = n - 1;int target = -nums[first];// 枚举 bfor (int second = first + 1; second < n; second++) {// 需要和上一次枚举的数不相同if (second > first + 1 && nums[second] == nums[second - 1]) {continue;}// 需要保证 b 的指针在 c 的指针的左侧while (second < third && nums[second] + nums[third] > target) {third--;}// 如果指针重合,随着 b 后续的增加// 就不会有满足 a+b+c=0 并且 b<c 的 c 了,可以退出循环if (second == third) {break;}if (nums[second] + nums[third] == target) {List<Integer> list = new ArrayList<Integer>();list.add(nums[first]);list.add(nums[second]);list.add(nums[third]);ans.add(list);while (second < third && nums[third] == nums[third - 1]) {third--;}}}}return ans;}}

15. 三数之和LeetCode相关推荐

  1. 15.三数之和-LeetCode

    目录 一.问题描述 二.解题思想 三.解题 1.判断极端情况 2.代码实现 总结 一.问题描述 这里直接采用的是leetcode上面的问题描述. 给你一个包含 n 个整数的数组 nums,判断 num ...

  2. Leetcode python《热题 HOT 100》15. 三数之和

    Leetcode python 之 <热题 HOT 100>:https://leetcode-cn.com/problemset/hot-100/ 15. 三数之和 给定一个包含 n 个 ...

  3. LeetCode 15. 三数之和(3Sum)

    15. 三数之和 15. 3Sum 题目描述 Given an array nums of n integers, are there elements a, b, c in nums such th ...

  4. [双指针|模拟] leetcode 15 三数之和

    [双指针|模拟] leetcode 15 三数之和 1.题目 题目链接 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ? ...

  5. 代码随想录算法训练营第07天 | LeetCode 454.四数相加2,383. 赎金信,15. 三数之和,18. 四数之和,总结

    LeetCode [454. 四数相加 II] 题目:给你四个整数数组 nums1.nums2.nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足 ...

  6. LeetCode刷题笔记- 15.三数之和

    LeetCode刷题笔记- 15.三数之和 C语言 题目 注意点 C语言 /*** Return an array of arrays of size *returnSize.* The sizes ...

  7. Java实现 LeetCode 15 三数之和

    15. 三数之和 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组. 注意:答案中不可以 ...

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

    15. 三数之和 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j.i != k 且 j != k ,同时还满足 nums[ ...

  9. LeetCode 15. 三数之和【双指针】

    15. 三数之和 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j.i != k 且 j != k ,同时还满足 nums[ ...

最新文章

  1. bzoj 1962: 模型王子
  2. 第二十八课.AlphaGo实例分析
  3. Ajax请求,跨域小坑
  4. 数据库的数据类型及运算符
  5. 在Sql Server 2005使用公用表表达式CTE简化复杂的查询语句
  6. WebClient 上传文件
  7. java处理请求的流程_Java Spring mvc请求处理流程详解
  8. 创造型模式——工厂模式
  9. pytorch学习笔记(四):线性回归从零开始实现
  10. onlyoffice添加删除字体
  11. VLAN Trunk
  12. Django 框架图
  13. Unity Shader 之 简单实现物体被压扁(top顶点的逐渐与bottom顶点重合)的效果
  14. 联想st510开卡软件_固态硬盘修复(慧荣sm2246XT主控开卡教程)
  15. uni-app app项目运行至夜神模拟器
  16. 美国计算机视觉专业排名,你了解美国计算机视觉专业吗
  17. html z-index 设置无效,css z-index属性不起作用的原因及解决方法
  18. 农产品溯源中GIS应用
  19. CVE-2017-7494紧急预警:Samba蠕虫级提权漏洞,攻击代码已在网上扩散
  20. 噪音测试标准:行业标准

热门文章

  1. Python面向对象游戏--人狗大战
  2. 香港主机上传文件慢怎么办?
  3. 电子印章均为智能印章模式
  4. select for update是行锁还是表锁,还真得看情况
  5. 改进:2-inception of Self attention-Stacking LSTM 新型网络模型介绍与编程实现
  6. 对游戏公司运作的理解
  7. 解决Parallels Desktop Windows11虚拟机上传网速变慢方法
  8. 中科院魏同镇教授解读韩春雨副教授基因编辑技术‘’NgAgo-gDNA‘’
  9. 全面深入理解Spring (spring 发展与家族成员关系)
  10. 队列的简单实现(C语言)