关于三个数之和为0的进阶解法V2
来源:互联网 发布:怎么创建三级域名 编辑:程序博客网 时间:2024/06/16 19:18
由于前一个版本算法在面对输入数据跨度较大时(如[-999999,4,8989898])会出现极大的空间浪费,故本次算法改进使用链表进行求和查找。但由于链表不能随机读取数据,所以效率比前一算法略低,但是可以极大地节约空间,而且也满足网站的性能要求。
public class Solution{ public ArrayList<ArrayList<Integer>> threeSum(int[] num) { // Start typing your Java solution below // DO NOT write main() function ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>(); ArrayList<Integer> tmp; Link head,end; int a,b,c; if(num.length <3) { return res; } head = new Link(); end = new Link(); head.num = num[0]; head.conut = 1; head.pre=null; head.next=null; end = head; for(int i = 1 ; i < num.length; i++) { Link p; for(p = head;p.num < num[i] && p.next != null ;p = p.next); if(p.num < num[i]) { Link q = new Link(); q.num = num[i]; q.conut = 1; q.next=p.next; p.next=q; q.pre=p; end = q; } else if(p.num > num[i]) { Link q = new Link(); q.num = num[i];q.conut = 1;if (p.pre != null) {p.pre.next = q;}q.pre = p.pre;p.pre = q;q.next = p;if (q.pre == null) {head = q;} } else { p.conut++; } } Link p = head; a = p.num; while(a <= 0 && p!=null) { a = p.num; p.conut--; Link q = end; b = q.num; while(b >= 0 && q!=null) { b = q.num; q.conut--; c = -a-b; if(a<=c && c<=b) { Link m; for(m = p;m.num < c && m.next!= null;m = m.next); if(m.num == c && m.conut >0) { tmp = new ArrayList<Integer>(); tmp.add(a); tmp.add(c); tmp.add(b); res.add(tmp); } } q.conut++; q = q.pre; } p.conut++; p=p.next; } return res; } private class Link { int num; int conut; Link pre,next; }}
- 关于三个数之和为0的进阶解法V2
- 关于三个数之和为0的进阶解法V1
- 关于三个数之和为0的最简单解法
- 3sum 三个数之和为0
- 给定一个无序整形数组,找出其中所以三个数之和为0的所有组合
- 三数之和为0的组合
- 关于相邻两数之和为素数的解答
- 三个数求最大值的不同解法
- 算法三个数之和
- 3Sum(数组中三个数之和为零)
- 查找和为0的三个数
- 3sum 三数之和为0的简单实现
- 三数之和为0的三指针实现
- 3Sum 三个数之和
- 求出数组中相邻三个数之和最大的~
- [LeetCode] 3Sum 找出所有三个元素之和为0的组合
- 找出求和为0的三个数 3sum
- 51nod 1090 三个数和为0的问题
- poj 2159 古老的密码(字符串)
- Google MapReduce
- java中的反射机制
- eclipse 快捷键大全
- hdu1242 广搜+优先队列
- 关于三个数之和为0的进阶解法V2
- 三行九个点,用4条线段连接(扩展,用3条,用1条)
- fzu 1901 Period II
- C/C++中怎样获取日期和时间
- Android 监听返回键|您确定要退出吗
- 希尔排序---for循环步长大于1时候的终止条件有问题
- 单向链表逆转(非递归)
- 【AIX】AIX磁盘相关操作
- java float double string转换和根据是否是小数判断显示格式