给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。
注意:
答案中不可以包含重复的四元组。
示例:
给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。
满足要求的四元组集合为:
[
[-1, 0, 0, 1],
[-2, -1, 1, 2],
[-2, 0, 0, 2]
]
代码:双指针,固定两个维度,剩下两个数就是典型双指针
class Solution:
def fourSum(self, nums: List[int], target: int) -> List[List[int]]:
n = len(nums)
nums.sort()
ans = list()
if n < 4:return ans
#if
for first in range(n-3):
if first > 0 and nums[first] == nums[first-1]:continue
#最小值大于target,跳出
if nums[first] + nums[first+1] + nums[first+2] + nums[first+3] > target:break
#最大值小于target continue
if nums[first] + nums[-3] + nums[-2] + nums[-1] < target: continue
for second in range(first+1, n-2):
if second > first+1 and nums[second] == nums[second-1]:continue
#最大值小于target continue
if nums[first] + nums[second] + nums[-2] + nums[-1] < target:continue
l, r = second+1, n-1
while l < r:
sum_num = nums[first] + nums[second] + nums[r] + nums[l]
if sum_num == target:
ans.append([nums[first], nums[second], nums[r], nums[l]])
l += 1
r -= 1
while l<r and nums[l] == nums[l-1]:l += 1
while l<r and nums[r] == nums[r+1]:r -= 1
elif sum_num > target:
r -= 1
else: l += 1
return ans
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/4sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/4sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。