专业编程基础技术教程

网站首页 > 基础教程 正文

python四数之和算法(python求数字之和)

ccvgpt 2024-11-16 17:28:56 基础教程 6 ℃

题目说明

给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):

0 <= a, b, c, d < n,a、b、c 和 d 互不相同

python四数之和算法(python求数字之和)

输入: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!

Tags:

最近发表
标签列表