18. 4Sum(求数组中和为指定值的4个数)
2017-09-20 22:27
288 查看
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]
]
题目大意:给定一个整型数组和一个整数target,找到4个元素,和为target,返回这4个元素,要求返回的结果集不包含重复的方案。
解题思路:参照《15. 3Sum(求数组中和为0的3个数)》,先对数组排序,不同的是按排序结果每次锁定两个数nums[i]和nums[j],然后用双指针思想从这两个数的右侧找到两个数,这两个数的和为target-nums[i]-nums[j]。
解题代码:(67ms,beats 61.09%)
A solution set is:
[
[-1, 0, 0, 1],
[-2, -1, 1, 2],
[-2, 0, 0, 2]
]
题目大意:给定一个整型数组和一个整数target,找到4个元素,和为target,返回这4个元素,要求返回的结果集不包含重复的方案。
解题思路:参照《15. 3Sum(求数组中和为0的3个数)》,先对数组排序,不同的是按排序结果每次锁定两个数nums[i]和nums[j],然后用双指针思想从这两个数的右侧找到两个数,这两个数的和为target-nums[i]-nums[j]。
解题代码:(67ms,beats 61.09%)
class Solution { public List<List<Integer>> fourSum(int[] nums, int target) { List<List<Integer>> res = new ArrayList<>(); Arrays.sort(nums); int len = nums.length; for (int i = 0; i < len - 3; i++) { for (int j = i + 1; j < len - 2; j++) { int left = j + 1; int right = len - 1; int diff = target - nums[i] - nums[j]; while (left < right) { if (nums[left] + nums[right] == diff) { res.add(new ArrayList<>(Arrays.asList(nums[i], nums[j], nums[left], nums[right]))); left++; while (left < len && nums[left] == nums[left - 1]) left++; right--; while (right > left && nums[right] == nums[right + 1]) right--; } else if (nums[left] + nums[right] < diff) { left++; } else { right--; } } while (j < len - 3 && nums[j] == nums[j + 1]) { j++; } } while (i < len - 4 && nums[i] == nums[i + 1]) { i++; } } return res; } }
相关文章推荐
- [C++]LeetCode 1: Two Sum(无序数组求指定和)
- 18. 4Sum -- 找到数组中和为target的4个数
- LeetCode18--4Sum--数组中某四个元素之和为某个输入的数值,输出这四个元素的值,并且这个四元组唯一
- LeetCode 18 4Sum (4个数字之和等于target)
- (1)Two Sum--求数组中相加为指定值的两个数
- Range Sum Query - Immutable【数组指定区间内的元素和】
- 经典算法 | 求解数组中的4个数的和为指定数的所有组合
- 根据给定的某个Sum,从数组中找出4个和为该Sum(四个数的和)
- 18 4Sum(寻找四个数之和为指定数的集合Medium)
- 23rd Feb: 数组(搜索专题)和二叉树(Path Sum专题)
- leetcode 560. Subarray Sum Equals K 动态规划DP子数组求和
- Java ArrayList add(index,element) 方法插入元素到数组指定位置
- 指定数组同时指定要查找的数,找出这个数在数组中的起始位置和结束位置
- oracle怎么切割一个指定的字符串按指定的标志符分割成字符数组
- js数组去重的4个方法
- 数组遍历排序指定key
- 18. 4Sum
- javascript数组18中方法总结
- 剑指Offer:指定数字在排序数组中出现的次数
- 读取指定文件夹下的全部文件,可通过正则进行过滤,返回文件路径数组 -- 基于node的一个函数