本文共 2020 字,大约阅读时间需要 6 分钟。
为了解决这个问题,我们需要找到一个数组中满足特定条件的四元组。四元组中的四个数必须来自不同的位置,并且它们的和等于给定的目标值。同时,这些四元组不能重复。
为了高效地解决这个问题,我们可以使用双指针法。具体步骤如下:
具体实现步骤如下:
class Solution: def fourSum(self, nums, target): n = len(nums) if n < 4: return [] nums.sort() result = set() # 使用集合存储四元组,避免重复 for a in range(n - 3): if a > 0 and nums[a] == nums[a - 1]: continue for b in range(a + 1, n - 2): if b > a + 1 and nums[b] == nums[b - 1]: continue left = b + 1 right = n - 1 while left < right: current_sum = nums[a] + nums[b] + nums[left] + nums[right] if current_sum == target: quad = (nums[a], nums[b], nums[left], nums[right]) if quad not in result: result.add(quad) # 去重处理,避免相邻重复元素 while left < right and nums[left] == nums[left + 1]: left += 1 while left < right and nums[right] == nums[right - 1]: right -= 1 elif current_sum < target: left += 1 else: right -= 1 return [list(quad) for quad in result]
这种方法确保了我们能够高效地找到所有满足条件的四元组,并且避免了重复的元素组合。
转载地址:http://nsjvz.baihongyu.com/