[LeetCode]15. 三数之和(数组)(双指针)
题目
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
示例:
给定数组 nums = [-1, 0, 1, 2, -1, -4],
满足要求的三元组集合为:
[
[-1, 0, 1],
[-1, -1, 2]
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/3sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题解
思路:升序排序,遍历操作数1(当它<=0),
{用双指针l、r遍历右侧,当sum=0,放入集合;当sum>0,r--; 当sum<0,l++特判:数组长度小于3
注意:对三个操作数的去重
相关
Arrays.sort(arr[]); //对原数组排序
Arrays.asList(elm1,elm2,elm3...) //return new ArrayList(elm1,elm2,elm3..); //返回承装这些元素的ArrayList
代码
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> ansList= new LinkedList<>();
Arrays.sort(nums);
for(int i=0;i<nums.length-2;++i){ //操作数1
if(i!=0&&nums[i]==nums[i-1]){ //去重
continue;
}
int l=i+1,r=nums.length-1; //操作数2、3
while(l<r){
int sum=nums[i]+nums[l]+nums[r];
if(sum==0){
ansList.add(Arrays.asList(nums[i],nums[l],nums[r]));
while(l+1<r&&nums[l+1]==nums[l]){l++;} //去重
while(r-1>l&&nums[r-1]==nums[r]){r--;} //去重
l++;
r--;
}else if(sum<0){
l++;
}else{
r--;
}
}
}
return ansList;
}
}
[LeetCode]15. 三数之和(数组)(双指针)的更多相关文章
- Java实现 LeetCode 15 三数之和
15. 三数之和 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组. 注意:答案中不可以 ...
- 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. 三数之和
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组. 注意:答案中不可以包含重复的三元组. ...
- LeetCode 15. 三数之和(3Sum)
题目描述 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组. 注意:答案中不可以包含重复 ...
- [Leetcode 15]三数之和 3 Sum
[题目] Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? ...
- [LeetCode] 15. 三数之和
题目链接:https://leetcode-cn.com/problems/3sum/ 题目描述: 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a ...
- LeetCode:三数之和【15】
LeetCode:三数之和[15] 题目描述 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的 ...
- 代码随想录第七天| 454.四数相加II、383. 赎金信 、15. 三数之和 、18. 四数之和
第一题454.四数相加II 给你四个整数数组 nums1.nums2.nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足: 0 <= i, ...
- 【LeetCode】三数之和【排序,固定一个数,然后双指针寻找另外两个数】
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组. 注意:答案中不可以包含重复的三元组. ...
随机推荐
- eclipse中点击pre-commit Request to ReviewBoard,预提交框不显示问题
需要设置:
- 基于pcntl的PHP进程池
想必大家都知道可以通过多进程或者多线程的方式实现异步. PHP多进程编程当前主要有这几种方式, 1>基于pcntl实现多进程,这也是PHP自带的多进程玩法 2>Swoole自己修改PHP内 ...
- 如何隐藏win32 控制台程序的console窗口 2011-06-17 17:59
加上 即可 // 隐藏窗口#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainC ...
- IDEA创建聚合项目
1.新建一个空工程 2.新建Modul New-->Modul 3.选择maven(不选模板,放在工程下) 4.选择依赖 <project xmlns="http://maven ...
- 使用css设置边框背景图片
使用css的特有属性,给不同的盒子添加边框图片. 为什么会有这一场景呢.因为,UI给我们前端的边框图片可能未必适合我们当前的内容. 这里我们主要使用到的属性有: border-image-source ...
- 解决QT5移植报错:This application failed to start because no Qt platform plugin could be initialized
今天自己基于Pyqt5开发了一个软件,打包成exe后在自己的电脑上运行正常,在其他机器上提示: This application failed to start because no Qt platf ...
- MySQL最全存储引擎、索引使用及SQL优化的实践
1 MySQL的体系结构概述 整个MySQL Server由以下组成 :Connection Pool :连接池组件Management Services & Utilities :管理服务和 ...
- 启动tomcat出现闪退的原因
出现闪退的可能有几点: 1.没有安装jdk或者配置jdk是否配置成功 2.找不到jdk安装的路径 3.tomcat环境配置失败 如果是第二点原因(确保第一第三点配置都正确无误)找不到jdk路径的话,可 ...
- keepalived的vrrp多播报文被禁,导致VIP同时位于多个机器上
keepalived的vrrp多播报文被禁,导致VIP同时位于多个机器上 查看man keepalived.conf,VRRP instances中给出了单播的设置方法,添加unicast_peer即 ...
- 如何下载gitbub中的单个文件
1.进入Github文件夹,打开对应文件: 2.右键单击Raw,然后目标另存为即可.