标签:else set contain ext etc add close nbsp java
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: The solution set must not contain duplicate quadruplets.
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] ]
Java Solution:
Runtime beats 63.69%
完成日期:07/13/2017
关键词:Array
关键点:利用threeSum, 只要多加一层for loop,注意修改避免重复的条件
1 public class Solution 2 { 3 public List<List<Integer>> fourSum(int[] nums, int target) 4 { 5 Arrays.sort(nums); 6 List<List<Integer>> res = new ArrayList<>(); 7 8 for(int i=0; i<nums.length-3; i++) 9 { 10 if(i > 0 && nums[i] == nums[i-1]) // if previous num is same, skip this num 11 continue; 12 // find three sum 13 for(int j=i+1; j<nums.length-2; j++) // no need to find twoSum if rest array size is only 1 or 0 14 { 15 if(j-1 > i && nums[j] == nums[j-1]) 16 continue; 17 // for each num, find the twoSum which equal -num in the rest array 18 int left = j + 1; 19 int right = nums.length-1; 20 21 while(left < right) 22 { 23 int sum = nums[i] + nums[j] + nums[left] + nums[right]; 24 if(sum == target) // find the two 25 { 26 res.add(Arrays.asList(nums[i], nums[j], nums[left], nums[right])); // ascending order 27 left++; 28 right--; 29 30 while(left < right && nums[left] == nums[left-1]) // if next num is same as this, skip this 31 left++; 32 while(left < right && nums[right] == nums[right+1]) 33 right--; 34 } 35 else if(sum > target) // meaning need smaller sum 36 right--; 37 else // nums[left] + nums[right] < sum, meaning need larger sum 38 left++; 39 } 40 41 } 42 } 43 44 return res; 45 } 46 }
参考资料:N/A
LeetCode 算法题目列表 - LeetCode Algorithms Questions List
标签:else set contain ext etc add close nbsp java
原文地址:http://www.cnblogs.com/jimmycheng/p/7163779.html