4 Sum
来源:互联网 发布:linux less命令 退出 编辑:程序博客网 时间:2024/05/29 15:16
Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum of target.
Note
Elements in a quadruplet (a,b,c,d) must be in non-descending order. (ie, a ≤ b ≤ c ≤ d)
The solution set must not contain duplicate quadruplets.
Example
For example, given array S = {1 0 -1 0 -2 2}, and target = 0. A solution set is:
(-1, 0, 0, 1)
(-2, -1, 1, 2)
(-2, 0, 0, 2)
解题思路:看到提示是使用Hashmap来做,没想到怎么处理。自己实现了全部迭代的解法,全部迭代因为不会出现重复计算,所以计算量也还是可以控制。参考网上的解法,实现双指针夹逼解法。
解法一:
public class Solution { /** * @param numbers : Give an array numbersbers of n integer * @param target : you need to find four elements that's sum of target * @return : Find all unique quadruplets in the array which gives the sum of * zero. */ public ArrayList<ArrayList<Integer>> fourSum(int[] numbers, int target) {Arrays.sort(numbers);ArrayList<ArrayList<Integer>> res = find(numbers, target, 0, 4);return res == null ? new ArrayList<ArrayList<Integer>>() : res;}public ArrayList<ArrayList<Integer>> find(int[] numbers, int target, int i, int n) {int N = numbers.length;if (n == 1) {while (i < N && numbers[i] != target)i++;if (i < N) {ArrayList<Integer> l = new ArrayList<Integer>();l.add(numbers[i]);ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();list.add(l);return list;} elsereturn null;} else {int t = i;ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();while (t + n <= N) {if (t > i && numbers[t] == numbers[t - 1]) {t++;continue;}target = target - numbers[t];ArrayList<ArrayList<Integer>> list = find(numbers, target, t + 1, n - 1);if (list != null) {for (ArrayList l : list) {l.add(0, numbers[t]);res.add(l);}}target = target + numbers[t];t++;}if (res.size() > 0)return res;elsereturn null;}} }
解法二:
public class Solution { /** * @param numbers : Give an array numbersbers of n integer * @param target : you need to find four elements that's sum of target * @return : Find all unique quadruplets in the array which gives the sum of * zero. */ public ArrayList<ArrayList<Integer>> fourSum(int[] numbers, int target) {Arrays.sort(numbers);ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();if (numbers == null || numbers.length < 4)return res;int N = numbers.length;for (int i = 0; i < N - 3; i++) {for (int j = i + 1; j < N - 2; j++) {int l = j + 1;int h = N - 1;while (l < h) {int sum = numbers[i] + numbers[j] + numbers[l] + numbers[h];if (sum < target)l++;else if (sum > target)h--;else {boolean find = false;for (ArrayList<Integer> ll : res) {if (ll.get(0) == numbers[i] && ll.get(1) == numbers[j] && ll.get(2) == numbers[l]&& ll.get(3) == numbers[h])find = true;}if (!find) {ArrayList<Integer> ll = new ArrayList<Integer>();ll.add(numbers[i]);ll.add(numbers[j]);ll.add(numbers[l]);ll.add(numbers[h]);res.add(ll);}l++;h--;}}}}return res;}}
0 0
- 【Leetcode】4Sum (Sum)
- leetcode 2 sum 3sum 4sum
- 3Sum 3Sum Closest 4Sum
- 3Sum & 3Sum Closest & 4Sum
- 2Sum 3Sum 4Sum
- 3sum、3Sum closet、 4sum
- 3Sum, 3Sum Closest, 4 Sum
- Leetcode 2SUM-3SUM-4SUM
- Leetcode-2sum,3sum,4sum
- leetcode 2 sum & 3 sum & 4 sum
- 4Sum
- 4Sum
- 4Sum
- 4Sum
- 4Sum
- 4Sum
- 4Sum
- 4Sum
- LeetCode100——Same Tree
- Smallest Regular Polygon - UVa 12300 几何
- 基于OAUTH的电子商务支付集成研究与实现
- Python-MySQL-2
- python之公共方法---日志
- 4 Sum
- apt和dpkg 详解
- 使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器笔记(四)
- 初步感受一下非阻塞的socket
- Myeclipse 10 for mac 安装过程及myeclipse 10 for mac 破解版下载
- JAVA学习笔记32——hashCode和equals方法+set接口
- Context-----Activity,Application之间的交流使者
- jquer ajax webservice 500 Internal Server Erro
- Guava中EventBus的使用和详解