15. 三数之和LeetCode
- 这算是小总结吧,代码啥的大体上跟大家的一样,只不过我认为官方应该多一个保证不同的操作(反正是通过了,就姑且当我的想法对吧)(明明四数值和官方都进行了保证重复操作,而三个竟然没有都进行,我不理解。)
- 还是,找几个数的和等于某数,就一定会用到目标数-第一个=剩下两个数的和
- 为了不重复,需要进行排序
- 第二个数和第三个数的寻找可以通过使用双指针,一个从先往后,另一个当两数之和大于目标-第一个数的时候,从后往前进行寻找(因为总和一定,一个数大,另一个数必然减小),这样节省了一个循环呢!第三个数一定比第二个数大,否则也不会存在了!
- 不同中最经典的情况就是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相关推荐
- 15.三数之和-LeetCode
目录 一.问题描述 二.解题思想 三.解题 1.判断极端情况 2.代码实现 总结 一.问题描述 这里直接采用的是leetcode上面的问题描述. 给你一个包含 n 个整数的数组 nums,判断 num ...
- Leetcode python《热题 HOT 100》15. 三数之和
Leetcode python 之 <热题 HOT 100>:https://leetcode-cn.com/problemset/hot-100/ 15. 三数之和 给定一个包含 n 个 ...
- LeetCode 15. 三数之和(3Sum)
15. 三数之和 15. 3Sum 题目描述 Given an array nums of n integers, are there elements a, b, c in nums such th ...
- [双指针|模拟] leetcode 15 三数之和
[双指针|模拟] leetcode 15 三数之和 1.题目 题目链接 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ? ...
- 代码随想录算法训练营第07天 | LeetCode 454.四数相加2,383. 赎金信,15. 三数之和,18. 四数之和,总结
LeetCode [454. 四数相加 II] 题目:给你四个整数数组 nums1.nums2.nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足 ...
- LeetCode刷题笔记- 15.三数之和
LeetCode刷题笔记- 15.三数之和 C语言 题目 注意点 C语言 /*** Return an array of arrays of size *returnSize.* The sizes ...
- Java实现 LeetCode 15 三数之和
15. 三数之和 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组. 注意:答案中不可以 ...
- 【LeetCode 算法】15.三数之和
15. 三数之和 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j.i != k 且 j != k ,同时还满足 nums[ ...
- LeetCode 15. 三数之和【双指针】
15. 三数之和 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j.i != k 且 j != k ,同时还满足 nums[ ...
最新文章
- Django安装使用基础
- Spring Data Solr教程:向所有存储库添加自定义方法
- 模板匹配中差值的平方和(SSD)与互相关准则的关系
- Remove Duplicates from Sorted Array II
- python websocket server模块_Python 3.5.2实现websocket服务端(四): WebSocketServer类实现...
- 在保护继承中基类的共有成员_C++面向对象:C++ 继承
- JAVA 8 LIST<对象> 转换SET
- ecshop根目录调用_ecshop调用指定商品分类下的商品
- Django model 反向引用中的related_name
- java实现redis客户端_Java实现Redis客户端
- 卖地方特色才产品,类似湖南味道那样的网上专卖店
- 不能为属性:[commandName]找到setter 方法
- 程序员大保健指南,给自己的身心偶尔放松的机会
- 电力系统中无线测温装置的设计与应用
- Unity 安卓 Unable to initialize the Unity Engine / No Enough Space to install unity
- 【操作说明】新版网络穿透/动态组网/远程运维/视频拉转推设备EasyNTS上云网关配置手册介绍
- 利用zxing生成二维码
- Android 弹出软键盘(输入法)
- 高斯约当法矩阵求逆(Matlab实现)
- 单点登录系统的设计与实现方案