Leetcode no. 15
2016-04-25 09:38
357 查看
15. 3Sum
Given an array S of n integers, are there elements a, b, c in S such that a + b + c =0? Find all unique triplets in the array which gives the sum of zero.
Note:
Elements in a triplet (a,b,c) must be in non-descending order. (ie, a ≤ b ≤ c)
The solution set must not contain duplicate triplets.
For example, given array S = {-1 0 1 2 -1 -4}, A solution set is: (-1, 0, 1) (-1, -1, 2)
public class Solution { public List<List<Integer>> threeSum(int[] nums) { List<List<Integer>> list= new LinkedList<>(); ArrayList<Integer> positives= new ArrayList<>(); ArrayList<Integer> negatives= new ArrayList<>(); HashMap<Integer, Integer> map= new HashMap<>(); int zeroes=0; if (nums.length==0) return list; Arrays.sort(nums); for (int ele: nums) { if (ele>0) positives.add(ele); else if (ele<0) negatives.add(ele); else zeroes++; if (!map.containsKey(ele)) map.put(ele, 1); } if (zeroes>=3) list.add(new LinkedList<Integer>(){{add(0);add(0);add(0);}}); if (zeroes>0){ int prev=0; for (int ele: negatives) { if (prev==ele) continue; if (map.containsKey(Math.abs(ele))) list.add(new LinkedList<Integer>(){{add(ele);add(0);add(Math.abs(ele));}}); prev= ele; } } if (negatives.size()==0 || positives.size()==0) return list; Integer[] nega= new Integer[negatives.size()]; negatives.toArray(nega); Integer[] posi= new Integer[positives.size()]; positives.toArray(posi); for (int i = 0; i < nega.length; i++) { if (i>0 && nega[i]==nega[i-1]) continue; int first= nega[i]; for (int j = i+1; j < nega.length; j++) { if (j>i+1 && nega[j]==nega[j-1]) continue; int second= nega[j]; if (map.containsKey(Math.abs(first+second))) list.add(new LinkedList<Integer>(){{add(first);add(second);add(Math.abs(first+second));}}); } } for (int i = 0; i < posi.length; i++) { if (i>0 && posi[i]==posi[i-1]) continue; int first= posi[i]; for (int j = i+1; j < posi.length; j++) { if (j>i+1 && posi[j]==posi[j-1]) continue; int second= posi[j]; if (map.containsKey(0-first-second)) list.add(new LinkedList<Integer>(){{add(0-first-second);add(first);add(second);}}); } } return list; } }
相关文章推荐
- Ubuntu14.04下安装opencv3.0
- node.js node包管理器--npm
- 机房水题欢乐赛 2016-04-25 下午
- (转载)浅析Hadoop文件格式
- TableLayout的属性
- eclipse启动Tomcat正常,访问报错404
- 反射
- mybatis3.2.3+spring整合
- 致自己和万千正在踏入开发行业的朋友们
- redis性能问题排查
- synchronization in Linux kernel
- Block小结
- GCC中文手册
- AS项目添加RecyclerView-v7步骤
- HDU 5668 Circle (约瑟夫游戏,求解同余方程组)
- node.js 源码安装node.js
- ICTCLAS 汉语词性标注集
- 对已经add的文件不在跟踪
- Windows 10年度更新Anniversary Update预览版开始推送,版本号Build 14328
- 使用ltrace工具跟踪PHP库函数调用的方法