Google算法题:三数求和
来源:互联网 发布:相宜本草淘宝有假货吗 编辑:程序博客网 时间:2024/05/22 15:50
http://www.lintcode.com/zh-cn/problem/3sum/
给出一个有n个整数的数组S,在S中找到三个整数a, b, c,找到所有使得a + b + c = 0的三元组。
注意事项
在三元组(a, b, c),要求a <= b <= c。
结果不能包含重复的三元组。
样例
如S = {-1 0 1 2 -1 -4}, 你需要返回的三元组集合的是:
(-1, 0, 1)
(-1, -1, 2)
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. */ //TC = O(nlgn)+O(n^2) public List<List<Integer>> threeSum(int[] numbers) { // write your code here List<List<Integer>> res = new ArrayList<List<Integer>>(); if(numbers==null) return res; int n = numbers.length; //TC = O(nlgn) Arrays.sort(numbers); //TC = O(n^2) for(int ai=0; ai<n; ai++){ if(numbers[ai]>0) return res; if(ai>0){ if(numbers[ai]==numbers[ai-1]) continue; } int a = numbers[ai]; for(int bi=ai+1, ci=n-1; bi<ci;){ int b = numbers[bi]; int c = numbers[ci]; if(a+b+c==0){ res.add(new ArrayList<Integer>(){{add(a);add(b);add(c);}}); while(++bi<--ci && numbers[bi]==b && numbers[ci]==c){} }else if(a+b+c>0) ci--; else if(a+b+c<0) bi++; } } return res; }};
阅读全文
0 0
- Google算法题:三数求和
- 算法#21--两数求和
- google笔试题 -- 根据已知数列得到不能组合求和的最小数
- 算法题-素数求和
- Google算法题:M-寻找缺失的数
- GEEK编程练习— —三数求和
- 一列数字随机求和等于某数的算法(整理)
- java50题----08叠数求和
- 算法Day2-三数之和
- Google排名新算法之 三
- Google PageRank排名新算法三
- 分治算法题之数组元素求和
- google 笔试题: 丑数
- google 笔试题: 丑数
- 百位数精确求和
- 汇编语言:两数求和
- 两数求和
- 线段数求和模板
- 2017百度之星总结
- C++学习12:数组array
- HDU 1019(n个数的LCM)
- 全面解析Bootstrap表单使用方法(表单按钮)
- 适配器模式(2)
- Google算法题:三数求和
- 手势监听上下左右
- Ubuntu16.04lTS安装qq文件时在处理时有错误发生:xxxi386问题
- 300. Longest Increasing Subsequence(DP经典问题)
- 利用豆瓣短评数据生成词云
- eclipse 设置默认编码为Utf-8
- Oracle11g安装(Linux)
- 【链家笔试题】问卷调查
- [NOIP2016真题]组合数问题