python编程计算两数之和:python四数之和算法
python编程计算两数之和:python四数之和算法3.左右指针移动判断四数之和是否成立,成立则添加列表,左右指针进行判断下一个值是否相同,如相同则跳过2.for循环判断当前数同上一个数是否相同,如相同则跳过,去重判断先排序,然后通过双指针移动判断四数之和同三数之和类似,只不过多了一层for循环1.for循环第一个数;for循环第二个数,然后第三个、第四个数分别设置为左右指针
题目说明给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a] nums[b] nums[c] nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):
0 <= a b c d < n,a、b、c 和 d 互不相同
输入:nums = [1 0 -1 0 -2 2] target = 0
输出:[[-2 -1 1 2] [-2 0 0 2] [-1 0 0 1]]
解题思路先排序,然后通过双指针移动判断
四数之和同三数之和类似,只不过多了一层for循环
1.for循环第一个数;for循环第二个数,然后第三个、第四个数分别设置为左右指针
2.for循环判断当前数同上一个数是否相同,如相同则跳过,去重判断
3.左右指针移动判断四数之和是否成立,成立则添加列表,左右指针进行判断下一个值是否相同,如相同则跳过
4.四数之和不成立则判断大小,如值小于目标,则左指针移动,否则右指针移动
代码如下from typing import List
class Solution:
def fourSum(self nums: List[int] target: int) -> List[List[int]]:
len_nums = len(nums)
if len_nums < 4:
return []
if len_nums == 4 and sum(nums) == target:
return [nums]
nums.sort()
result = []
for i in range(len_nums - 3):
if i > 0 and nums[i] == nums[i - 1]:
continue
for j in range(i 1 len_nums - 2):
if j > i 1 and nums[j] == nums[j - 1]:
continue
l r = j 1 len_nums - 1
while l < r:
total = nums[i] nums[j] nums[l] nums[r]
if total == target:
result.append([nums[i] nums[j] nums[l] nums[r]])
while l < r and nums[l] == nums[l 1]:
l = 1
while l < r and nums[r] == nums[r - 1]:
r -= 1
l = 1
r -= 1
elif total < target:
l = 1
else:
r -= 1
return result
总结
人生苦短,我用python!