LeetCode:4Sum
2013-08-27 19:43
211 查看
这题我用O(N*N*N)时间复杂度做的,不知道是不是最优的。
用indexMap保存了各值的坐标,在查找第四个值时方便。
用indexMap保存了各值的坐标,在查找第四个值时方便。
import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.Map; public class L4Sum { public static void main(String[] args) { int[] num = new int[6]; num[0] = 1; num[1] = 0; num[2] = -1; num[3] = 0; num[4] = -2; num[5] = 2; L4Sum s = new L4Sum(); ArrayList<ArrayList<Integer>> ss = s.fourSum(num, 0); System.out.println(ss); } public ArrayList<ArrayList<Integer>> fourSum(int[] num, int target) { ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>(); Arrays.sort(num); Map<Integer, Integer> indexMap = new HashMap<Integer, Integer>(); for (int i = num.length - 1; i >= 0; i--) { indexMap.put(num[i], i); } for (int i = 0; i < num.length; i++) { if (i - 1 >= 0 && num[i] == num[i - 1]) { continue; } int startJ = i + 1; for (int j = i + 1; j < num.length; j++) { if (num[j] == num[j - 1] && j - 1 >= startJ) { continue; } int startK = j + 1; for (int k = j + 1; k < num.length; k++) { if (num[k] == num[k - 1] && k - 1 >= startK) { continue; } int s = num[i] + num[j] + num[k]; int t = target - s; Integer index = indexMap.get(t); if (index != null) { if (index <= k) { index = k + 1; } if (index < num.length && num[index] == t) { ArrayList<Integer> list = new ArrayList<Integer>(4); list.add(num[i]); list.add(num[j]); list.add(num[k]); list.add(t); result.add(list); } } } } } return result; } }
相关文章推荐
- [LeetCode] 4Sum
- [LeetCode]--18. 4Sum
- LeetCode(18) 4Sum
- 算法分析与设计课程——LeetCode刷题之4Sum
- leetcode[18]4Sum
- Leetcode: 4Sum
- 【leetcode刷题笔记】4Sum
- [leetcode刷题系列]4Sum
- leetcode18~4Sum
- [Leetcode] 18. 4Sum
- LeetCode_OJ【18】4Sum
- LeetCode - 4Sum
- LeetCode | 4Sum
- LeetCode(18)4Sum
- LeetCode:4Sum
- 4Sum leetCode Java
- leetcode 15 3sum & leetcode 18 4sum
- Leetcode NO.18 4Sum
- [Leetcode]4Sum
- LeetCode | 4Sum