标签:leetcode
https://oj.leetcode.com/problems/3sum/
public class Solution {
public List<List<Integer>> threeSum(int[] num) {
// Solution A
// return threeSum_Sort(num);
// Solution B
return threeSum_Map(num);
}
////////////////////
// Solution A: Sort
//
// O(n^2)
private List<List<Integer>> threeSum_Sort(int[] numbers)
{
Set<List<Integer>> toReturn = new HashSet<>();
// Sort
Arrays.sort(numbers);
int len = numbers.length;
for (int i = 0 ; i < len ; i ++)
{
// Fix i.
// move index j from i -> len
// index k from len to i;
int j = i + 1;
int k = len - 1;
while (j < k)
{
int sum = numbers[i] + numbers[j] + numbers[k];
if (sum == 0)
{
List<Integer> r = new ArrayList<>();
r.add(numbers[i]);
r.add(numbers[j]);
r.add(numbers[k]);
toReturn.add(r);
j ++;
k --;
}
else if (sum > 0)
{
k --;
}
else
{
j ++;
}
}
}
return new ArrayList<List<Integer>>(toReturn);
}
////////////////////
// Solution A: Map
//
// O(n^2)
private List<List<Integer>> threeSum_Map(int[] num)
{
Set<List<Integer>> toReturn = new HashSet<>();
Map<Integer, Integer> map = new HashMap<>();
int len = num.length;
for (int i = 0 ; i < len ; i ++)
{
map.put(num[i], i);
}
for (int i = 0 ; i < len ; i ++)
{
for (int j = i + 1 ; j < len ; j ++)
{
int sum = num[i] + num[j];
Integer pos = map.get(-sum);
if ((pos != null) && (pos != i && pos != j)) // A result found.
{
List<Integer> r = new ArrayList<Integer>();
r.add(num[i]);
r.add(num[j]);
r.add(-sum);
Collections.sort(r);
toReturn.add(r);
}
}
}
return new ArrayList<List<Integer>>(toReturn);
}
////////////////////
// Solution A: Brute Force
//
// Assume num.length >= 3
private List<List<Integer>> threeSum_BruteForce(int[] num)
{
Set<List<Integer>> toReturn = new HashSet<>();
int len = num.length;
for (int i = 0 ; i < len ; i ++)
{
for (int j = i + 1 ; j < len ; j ++)
{
for (int k = j + 1 ; k < len ; k ++)
{
if (num[i] + num[j] + num[k] == 0)
{
List<Integer> r = new ArrayList<Integer>(Arrays.asList(num[i], num[j], num[k]));
Collections.sort(r);
toReturn.add(r);
}
}
}
}
return new ArrayList<List<Integer>>(toReturn);
}
}标签:leetcode
原文地址:http://7371901.blog.51cto.com/7361901/1598415