LeetCode15: 3 Sum
来源:互联网 发布:西南大学网络登录窗口 编辑:程序博客网 时间:2024/05/16 17:47
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 ArrayList<ArrayList<Integer>> threeSum(int[] num) { // Start typing your Java solution below // DO NOT write main() function Arrays.sort(num); ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>(); if(num.length < 3) return res; // 3 indexes int i=0,j,k; // 3 values int a,b,c; int len = num.length; while(i<=len-3){ a=num[i]; j=i+1; k=len-1; while(j<k){ b=num[j]; c=num[k]; if(a+b+c==0){ ArrayList<Integer> list = new ArrayList<Integer>(); list.add(a); list.add(b); list.add(c); res.add(list); // Very Important!!! j++; while(j<k && num[j]==b) j++; k--; while(j<k && num[k]==c) k--; } else if(a+b+c<0) j++; else k--; } i++; while(num[i]==a && i<=len-3) i++; } return res; }}
------------------------------------------------------------------------------------------------------------------------------------------
LL's solution:
public ArrayList<ArrayList<Integer>> threeSum(int[] num) { // Start typing your Java solution below // DO NOT write main() function int len = num.length; if(len<3) return new ArrayList<ArrayList<Integer>>(); ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>(); //create hashmap HashMap<Integer, ArrayList<Integer>> map = new HashMap<Integer, ArrayList<Integer>>(); for(int i = 0; i<len; i++){ if(map.containsKey(num[i])){ ArrayList<Integer> value = map.get(num[i]); value.add(i); map.put(num[i],value); } else{ ArrayList<Integer> value = new ArrayList<Integer>(); value.add(i); map.put(num[i],value); } } //iterate o(n^2) for(int i = 1; i<len; i++) for(int j=0; j<i; j++){ int a = num[i]; int b = num[j]; int c = 0-a-b; if(map.containsKey(c)){ ArrayList<Integer> value = map.get(c); for(int e:value){ if(e!=i&&e!=j){ //exist a triplet ArrayList<Integer> triplet = new ArrayList<Integer>(); triplet.add(a); triplet.add(b); triplet.add(c); Collections.sort(triplet); if(res.indexOf(triplet)==-1) res.add(triplet); } } } } return res; }
- LeetCode15: 3 Sum
- LeetCode15:3Sum
- leetcode15 3Sum
- leetcode15 3Sum
- LeetCode15:3Sum
- leetcode15 3sum
- [LeetCode15]3Sum
- leetcode15---3Sum
- leetcode15.3Sum
- leetcode15:3Sum
- leetcode15:3Sum
- Leetcode15. 3Sum
- leetcode15. 3Sum
- leetcode15~3Sum
- leetcode15. 3Sum
- leetcode15. 3Sum
- LeetCode15. 3Sum
- leetcode15: 3Sum
- POJ1789--Truck History--最小生成树
- An Example of Software Application made by Delphi XE
- 开发中遇到的异常记录
- 冷门产品怎么做产品营销
- poj-1562Oil Deposits
- LeetCode15: 3 Sum
- 详解Java解析XML的四种方法
- HOJ 题目分类
- HDOJ P1022 Train Problem I
- 解决 MAC 10.8.2 + VirtualBox 4.1.20 报VT-x is being used by another hypervisor
- poj-1163 The Triangle
- php中heredoc, nowdoc两种界定字符串
- 领域类之GORM查询
- POJ308--Blue Jeans--后缀树