原题链接:leetcode18
题目描述:给定一个数组和一个target,在数组中找出四个元素使得四个元素之和与target相等.并返回四个元素组合的数组
思路:
思路一
暴力解法可以通过多层循环一个元素一个元素计算比较.但本题可以通过双指针方式减少循环次数
需要注意的小点:对于去重的处理,第一种可以采用得到所有的组合之后对二维数组借助map进行去重.第二种通过对nums排序,在寻找组合的时候 对于已经处理过相同的元素进行一个过滤,具体处理如下面的代码实现,与三个元素之和处理基本一致.
let res = []
let len = nums.length
if (len < 4) return res
nums.sort((a, b) => a - b)
for (let i = 0; i < len - 3; i++) {
if (i > 0 && nums[i] == nums[i - 1])//去重
continue;
for (let j = i + 1; j < len - 2; j++) {
if (j > i + 1 && nums[j] == nums[j - 1])//去重
continue;
let left = j + 1, right = len - 1
while (left < right) {
let sum = nums[i