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]
]
思路:双指针法
要求的是a+b+c=0
1.首先可以先排序(O(nlogn)),这样保证数组有序之后可以利用大小关系判断。
2.设置两个指针start、end,分别从左边以及右边向中间遍历,如果找到a+b+c==0,那么可以将这个答案加入到答案集里 如果a+b+c<0,此时固定的是c,说明a+b太小了,因此start+=1;如果a+b+c>0,此时a+b过大,因此end-=1
3.去重,这一步则是利用了有序性,如果两个数相同,那他们在数组的位置一定是相邻的(连着几个数相同也是可能的),因此 去重的操作就能简单遍历一下相邻的是否相同即可。由于数组有序性使得去重这一步很简单,因此也可以看出第一步的作用。
提交的代码:
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
Arrays.sort(nums);
int i,start=1,end=nums.length-1;
List<List<Integer>> result = new ArrayList<List<Integer>>();
for(i=0;i<nums.length-2;i++)
{
if(i > 0 && nums[i] == nums[i-1]) continue; //去重
start=i+1;
end=nums.length-1;
while(start<end)
{
if(nums[i]+nums[start]+nums[end]>0)
{
end--;
}
else if(nums[i]+nums[start]+nums[end]<0)
{
start++;
}
else
{
List<Integer> list = new ArrayList<Integer>();
list.add(nums[i]);
list.add(nums[start]);
list.add(nums[end]);
result.add(list);
while (start<end && nums[start] == nums[start+1]) start++; // 去重
while (start<end && nums[end] == nums[end-1]) end--; // 去重
start++;
end--;
}
}
}
return result;
}
}
Leetcode--15. 三数之和相关推荐
- [双指针|模拟] leetcode 15 三数之和
[双指针|模拟] leetcode 15 三数之和 1.题目 题目链接 给你一个包含 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 ...
- 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. 三数之和 思路 思路1 比较容易想到的就是,求三数之和等于0,可以等价于求两个数的和,然后看这个和的相反数是否在nums里面. 但是 T_T这样的话复杂度太高了,会超时,捂脸,最后三 ...
- LeetCode 15三数之和16最接近的三数之和
三数之和(双指针) 题意: 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组. 注意 ...
- Leetcode 15.三数之和
Time: 20190920 Type: Medium 题目描述 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所 ...
- Leetcode 15:三数之和(最详细解决方案!!!)
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 *a,b,c ,*使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组. **注意:**答案中不可以包含重 ...
- 2021-5-11 Leetcode 15.三数之和
1.1我的解法以及考虑到的几点问题 1)数组长度小于3的不用考虑,直接返回 2)暴力法:每一次查找不是自己选择的数字,看一下能否凑成零(但是这样不知道如何去重) 3)拆成一个数字+LC 1.两数之和的 ...
- Leetcode 15.三数之和 双指针 or 暴力哈希
题目链接:传送门 题目:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组. 暴力+ ...
最新文章
- 扎哈的绝唱:“六芒星”大兴机场的几何赏析
- NeurIPS 2019截稿期服务器被挤爆,投稿数增长40%创历史新高
- java中静态代码块的用法 static用法详解(转)
- linux hrtimer 绑定cpu,Linux hrtimer分析--未配置高精度模式
- 【转载】比特币入门教程
- MongoRepository自定义条件及分页查询代码
- html文字粒子效果简陋,5个很棒的CSS3文本粒子动画特效
- VS2010测试功能之旅:编码的“.NET研究”UI测试(2)-操作动作的录制原理(上)...
- 【HDU3530】 [Sdoi2014]数数 (AC自动机+数位DP)
- appium java api文档_Appium常用API
- allergo 导出光辉配置_请教Allegro导出光绘文件的层要选择哪些层?
- 99%的程序都没有考虑的网络异常
- android 内存测试
- CABasicAnimation 按home键后台之后,再切回来动画就停止
- Windows10 快捷方式失效
- nodejs 安装教程
- c语言中e什么作用是什么,c语言中%e是什么意思
- 网易云易盾推出面向微信小程序的大数据反作弊产品
- ASP.NET Core 基础(十三)——模型绑定与模型验证
- 大漠插件ocr多选字库_易语言大漠插件模块制作设置字库及OcrEx识别字符串
热门文章
- LeetCode 290. 单词规律(哈希)
- LeetCode 179. 最大数(自定义谓词函数--Lambda表达式--排序)
- LeetCode 1002. 查找常用字符(哈希)
- 利python写用赌博游戏函数版赏析:
- Flink的ProcessFunction API
- linux python命令无反应_Python学习第164课--Linux命令行特殊符号的意义及命令的语法规则...
- word里双横线怎么打_美人计 | 精致打工人秀智,教你内双怎么化
- 模型训练太慢?显存不够用?这个算法让你的GPU老树开新花
- 要成为一个 Java 架构师得学习哪些知识以及方法?
- 论文小综 | Using External Knowledge on VQA