四数之和

四数之和 - 力扣(LeetCode)

题目描述

给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):

0 <= a, b, c, d < n
a、b、c 和 d 互不相同
nums[a] + nums[b] + nums[c] + nums[d] == target
你可以按 任意顺序 返回答案 。

示例 1:

输入:nums = [1,0,-1,0,-2,2], target = 0
输出:[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]
示例 2:

输入:nums = [2,2,2,2,2], target = 8
输出:[[2,2,2,2]]  

提示:

1 <= nums.length <= 200
-109 <= nums[i] <= 109
-109 <= target <= 109

解1 哈希表

和两数之和的思路相似我们可以用哈希表解决这个问题
循环两层然后就转化成了两数之和的问题, 需要注意的是循环的时候需要跳过相同的元素。

1
2
3
4
5
6
7
8
9
10
11
12
13
/**
* @param {number []} nums
* @param {number} target
* @return {number [][]}
* 时间复杂度 O(n^3)
* 空间复杂度 O(n)
**/
function fourSum(nums: number [][], target: number){
for(let i = 0; i < nums.length; i++){
// 跳过重复元素
if(i !== 0 && nums[i] === nums[i - 1]) continue
}
}

当然去重操作也可以放在后面进行 :)