快捷搜索:  汽车  科技

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!

python编程计算两数之和:python四数之和算法(1)

猜您喜欢: