Leetcode 四数之和

思路

和三数之和的类似,首先需要对数组进行排序。用两个嵌套的外部循环(i 和 j)来固定潜在四元组的前两个数字。为了避免重复的四元组,代码会跳过连续相同的数字,无论是对 i 还是对 j。在这些循环内部,它初始化两个指针 left 和 right,left 指向 j 之后的位置,right 指向数组末尾。这两个指针随后向内移动,寻找另外两个数字,使其与 nums[i] 和 nums[j] 相加后等于 target。如果当前和小于 target,left 指针向右移动;如果大于 target,right 指针向左移动。如果和等于 target,则将该四元组添加到结果列表中,然后跳过 left 和 right 指针当前位置上所有紧邻的重复数字,以确保只记录唯一的四元组,之后再继续向内移动。

python 复制代码
class Solution:
    def fourSum(self, nums: List[int], target: int) -> List[List[int]]:
        if not nums:
            return []
        nums.sort()
        res=[] #存储结果
        n=len(nums)
        for i in range(n):
            if i>0 and nums[i]==nums[i-1]:
                continue
            for j in range(i+1,n):
                if j>i+1 and nums[j]==nums[j-1]:
                    continue
                left=j+1
                right=n-1
                while left<right:
                    sum=nums[i]+nums[j]+nums[left]+nums[right]
                    if sum<target:
                        left+=1
                    elif sum>target:
                        right-=1
                    else:
                        res.append([nums[i],nums[j],nums[left],nums[right]])
                        while left<right and nums[left]==nums[left+1]:
                            left+=1
                        while left<right and nums[right]==nums[right-1]:
                            right-=1
                        left+=1
                        right-=1
        return res
相关推荐
晚风吹长发16 分钟前
二分查找算法+题目详解
c++·算法·二分查找
悠悠~飘22 分钟前
18.PHP基础-递归递推算法
算法·php
pilgrim5344 分钟前
结合 Leetcode 题探究KMP算法
算法·leetcode
罗义凯1 小时前
其中包含了三种排序算法的注释版本(冒泡排序、选择排序、插入排序),但当前只实现了数组的输入和输出功能。
数据结构·c++·算法
kevien_G12 小时前
JAVA之二叉树
数据结构·算法
syt_biancheng2 小时前
Day3算法训练(简写单词,dd爱框框,3-除2!)
开发语言·c++·算法·贪心算法
二进制的Liao2 小时前
【编程】脚本编写入门:从零到一的自动化之旅
数据库·python·算法·自动化·bash
自然数e3 小时前
C++多线程【线程管控】之线程转移以及线程数量和ID
开发语言·c++·算法·多线程
John_ToDebug3 小时前
重建内在秩序:从神经科学理解情绪的逻辑
程序人生·职场和发展
云在Steven3 小时前
在线确定性算法与自适应启发式在虚拟机动态整合中的竞争分析与性能优化
人工智能·算法·性能优化