题目:三数之和
2015-08-22 00:43
337 查看
给出一个有n个整数的数组S,在S中找到三个整数a, b, c,找到所有使得a + b + c = 0的三元组。
您在真实的面试中是否遇到过这个题?
Yes
样例
如S = {-1 0 1 2 -1 -4}, 你需要返回的三元组集合的是:
(-1, 0, 1)
(-1, -1, 2)
注意
在三元组(a, b, c),要求a <= b <= c。
结果不能包含重复的三元组。
标签 Expand
相关题目 Expand
给出一个有n个整数的数组S,在S中找到三个整数a, b, c,找到所有使得a + b + c = 0的三元组。
您在真实的面试中是否遇到过这个题?
Yes
样例
如S = {-1 0 1 2 -1 -4}, 你需要返回的三元组集合的是:
(-1, 0, 1)
(-1, -1, 2)
注意
在三元组(a, b, c),要求a <= b <= c。
结果不能包含重复的三元组。
标签 Expand
相关题目 Expand
public class Solution { /** * @param numbers : Give an array numbers of n integer * @return : Find all unique triplets in the array which gives the sum of zero. */ public ArrayList<ArrayList<Integer>> threeSum(int[] numbers) { // write your code here if(null==numbers||0==numbers.length) return null; ArrayList<ArrayList<Integer>> res = new ArrayList<>(); //先排序,可以选择更加优秀的排序方式比如快排,合并等 for(int i=0;i<numbers.length;i++){ for(int j=i;j<numbers.length;j++){ if(numbers[i]>numbers[j]){ int tmp = numbers[i]; numbers[i] = numbers[j]; numbers[j] = tmp; } } } //a+b+c = 0 ; b+c = -a,就相当于求2者的和,用2个指针分别指向排序好的数组,需要去判断唯一性 //a,b,c 若与相邻元素的一致则跳过 for(int i=0;i<numbers.length;i++){ if(i>=1){ if(numbers[i] == numbers[i-1]){ continue; } } int s = i+1; int e = numbers.length-1; while(s<e){ if(s>i+1&&numbers[s]==numbers[s-1]){ s++; continue; } if(e<numbers.length-1&&numbers[e]==numbers[e+1]){ e--; continue; } if(numbers[s]+numbers[e]==(0-numbers[i])){ ArrayList<Integer> tmp = new ArrayList<>(); tmp.add(numbers[i]); tmp.add(numbers[s]); tmp.add(numbers[e]); res.add(tmp); s++; }else if(numbers[s]+numbers[e]>(0-numbers[i])){ e--; }else{ s++; } } } return res; } }
相关文章推荐
- 题目:N皇后问题 II
- 很高兴加入写博客的行列,慢慢记录自己的一点点进步
- LeetCode ||Count Primes
- 微信抢红包源码
- 单例模式(Singleton)
- table表格css样式
- 随手记
- NBUT 1449 Annie (模拟)
- 202 Happy Number
- HDOJ5256 序列变换(dp)
- Python pip – error: invalid command ‘bdist_wheel’
- JQuery选择器操作
- 兄弟间的事,筹栎间的那点事
- Sublime Text 快捷键
- 摩天大厦不可伸缩
- [IOS]CoreAnimation基础[翻译6部分]
- git——OS X创建仓库以及链接github
- java中volatile关键字的含义
- 面试题:冒泡排序,选择排序,插入排序,快速排序,归并排序,堆排序
- ASP.NET——生成验证码