题目(medium)
给你一个由 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
你可以按 任意顺序 返回答案 。
思路
在三数之和的基础上多个 for 循环。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| const fourSum = (nums, target) => { const len = nums.length; if(len < 4) return []; nums.sort((a, b) => a - b); const res = []; 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 l = j + 1, r = len - 1; while(l < r) { const sum = nums[i] + nums[j] + nums[l] + nums[r]; if(sum < target) { l++; continue} if(sum > target) { r--; continue} res.push([nums[i], nums[j], nums[l], nums[r]]); while(l < r && nums[l] === nums[++l]); while(l < r && nums[r] === nums[--r]); } } } return res; };
|
时间复杂度: O(n^3)。
空间复杂度: O(1)。