package com.interview.algorithms.array; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * Created_By: stefanie * Date: 14-11-6 * Time: 下午5:37 */ public class C4_32B_UniqueTripleSumK { public static List<List<Integer>> threeSum(int[] num) { List<List<Integer>> sols = new ArrayList<>(); Arrays.sort(num); Integer prev = null; for(int i = 0; i < num.length - 2; i++){ if(prev == null || num[i] != prev){ int key = 0 - num[i]; search(num, key, i, i + 1, num.length - 1, sols); } prev = num[i]; } return sols; } private static void search(int[] num, int key, int offset, int begin, int end, List<List<Integer>> sols){ while(begin < end){ int sum = num[begin] + num[end]; if(sum == key){ List<Integer> sol = new ArrayList<>(); sol.add(num[offset]); sol.add(num[begin++]); sol.add(num[end--]); sols.add(sol); while(begin < end && num[begin] == num[begin - 1]) begin++; while(begin < end && num[end] == num[end + 1]) end--; } else if(sum > key) end--; else begin++; } } }