当前位置:网站首页>力扣15-三数之和——HashSet&双指针法
力扣15-三数之和——HashSet&双指针法
2022-08-09 18:54:00 【张怼怼√】
题目描述
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。
注意:答案中不可以包含重复的三元组。
求解思路
因为题目答案中可能会有重复的三元组,所以需要对结果去重,但是发现集合set本身就不允许重复元素存在,所以采用HashSet来存储结果;
题目求解采用双指针法;
定义left和right,分别指向 i+1 和 nums.length-1 的元素,然后遍历nums,和之前一样;
这个地方需要注意当我们需要把普通的数组add进ArrayList需要做转换:Arrays.toList;
最后需要将HashSet转换为ArrayList,需要再做一次转换。
输入输出示例
代码
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
Set<List<Integer>> res = new HashSet<>();
Arrays.sort(nums);
for(int i = 0; i < nums.length; i++){
int left = i + 1, right = nums.length - 1;
while(left < right){
if(nums[i] + nums[left] + nums[right] == 0){
res.add(new ArrayList<>(Arrays.asList(nums[i],nums[left],nums[right])));
left++;
right--;
}else if(nums[i] + nums[left] + nums[right] < 0){
left++;
}else{
right--;
}
}
}
List<List<Integer>> ress = new ArrayList<>(res);
return ress;
}
}
边栏推荐
猜你喜欢
PCL学习之滤波Filtering
C#/VB.NET: Extract text and pictures from PowerPoint document
leetcode 二叉树的分层遍历1
[] free column Android dynamic debugging GDB APP of safety
新起之秀 DPU,正在掀起数据中心变革!
新出现的去中心化科学能够为科学领域带来什么?
[免费专栏] Android安全之Android奇淫run-as命令
[免费专栏] Android安全之Android应用的汉化功能(修改so中的字符串内容)
不经意传输协议OT
小满nestjs(第六章 nestjs cli 常用命令)
随机推荐
Paper sharing: "FED BN" uses the LOCAL BATCH NORMALIZATION method to solve the Non-iid problem
WPF 实现带蒙版的 MessageBox 消息提示框
AWS CodePipeLine deploys ECS across accounts
leetcode二叉搜索树与双向链表
双屏协作更高效,华硕灵耀X 双屏Pro 2022创作体验再升级
小满nestjs(第六章 nestjs cli 常用命令)
MFC tutorial
环境:Flink版本:1.15.1jar包:flink-sql-connector-oracle
php安装make出现“collect2:error:ldreturned1exitstatus
Codesys结构变量编程应用(STRUCT类型)
数学建模——模拟退火
解决执行Command报错executable file not found in $PATH
mysql 重复数据 分组 多条最新的记录
渗透测试-对新型内存马webshell的研究
php删除字符串的空格
鲜花线上销售管理系统的设计与实现
这年头还不来尝试线稿图视频??
IDEA tools commonly used configuration
2022深圳(软考中级)系统集成项目管理工程师报名
hdu 2647 Reward(拓扑排序)