3 Sum
来源:互联网 发布:三年php工作经验简历 编辑:程序博客网 时间:2024/05/21 00:17
public ArrayList<ArrayList<Integer>> threeSum(int[] num) { // Start typing your Java solution below // DO NOT write main() function Arrays.sort(num); ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>(); if(num.length < 3) return result; for(int i = 0; i < num.length - 2 && num[i] <= 0; i++) { if(i > 0 && num[i] == num[i - 1]) continue; //skip the duplicate, pay attention here int start = i + 1; int end = num.length - 1; while(start < end && num[end] >= 0) { if(num[i] + num[start] + num[end] == 0) { ArrayList<Integer> sub = new ArrayList<Integer>(3); sub.add(num[i]); sub.add(num[start++]); sub.add(num[end--]); result.add(sub); //pay attention here, skip the duplicate while(start < end && num[start] == num[start - 1]) start++; while(start < end && num[end] == num[end + 1]) end--; }else if(num[i] + num[start] + num[end] > 0) { end--; }else { start++; } } } return result; } public ArrayList<ArrayList<Integer>> threeSum(int[] num) { // Start typing your Java solution below // DO NOT write main() function Arrays.sort(num); ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>(); Set<ArrayList<Integer>> set = new HashSet<ArrayList<Integer>>(); if(num.length < 3) return result; for(int i = 0; i < num.length - 2 && num[i] <= 0; i++) { int start = i + 1; int end = num.length - 1; while(start < end && num[end] >= 0) { if(num[i] + num[start] + num[end] == 0) { ArrayList<Integer> sub = new ArrayList<Integer>(3); sub.add(num[i]); sub.add(num[start++]); sub.add(num[end--]); set.add(sub); }else if(num[i] + num[start] + num[end] > 0) { end--; }else { start++; } } } result.addAll(set); return result; }