力扣题库刷题笔记18--四数之和

news/2024/10/23 7:15:26/

1、题目如下:

2、个人Python代码实现:

        首先看到这题就会想到两种方式,一是四层循环暴力破解,二就是基于前面的三数之和外面加加一层嵌套。

        先看一下暴力破解:

 

         这里可以看到,当数据量足够大时,依旧会超时。但是在机考的时候,使用暴力破解未必不是一种方式,因为每题得分是按照用例通过数计算,也许可以得到该题的大部分分数。同时,实际上这里可以,先对数组nums进行排序,然后再进行循环,可以提升一部分性能,但是这个用例大概率还是不能通过。

3、题解Python代码实现

        诚如上文说的,基于三数之和外加一层嵌套,实际上还是使用的双指针。但是个人并没有实现,浅看了一首题解, 就解出来了:

         如果不好理解,建议先熟悉前面的三数之和和最接近三数之和(写给我自己,如果过段时间写不出来),再来理解本题

        提交代码如下:

class Solution:

    def fourSum(self, nums: List[int], target: int) -> List[List[int]]:

        count = len(nums)           #计算数组nums长度

        res = []                    #输出数组

        nums.sort()                 #数组nums进行升序排序

        for a in range(count - 3):  #a为四个数值中的第一个数

            if a > 0 and nums[a-1] == nums[a]:      #当遍历数组当前数值与前一个数值相同时,进入下一次循环

                continue                            #当连续四个数值之和大于target,代表本次循环往后任意四个数值均大于target

            if nums[a] + nums[a+1] + nums[a+2] + nums[a+3] > target:    

                break                     #当前数值与nums最后三个数值大于target时,意味着可能存在数值和等于target,进入下一次循环

            if nums[a] + nums[count-3] + nums[count-2] + nums[count-1] < target:

                continue                #

            for b in range(a+1,count-2):            #b为四个数值中的第二个数

                if b > a+1 and nums[b-1] == nums[b]:    #去重,原理和第7行一致

                    continue

                if nums[a] + nums[b] + nums[b+1] + nums[b+2] > target:#原理和第9行代码一致,注释在第8行

                    break

                if nums[a] + nums[b] + nums[count-1] + nums[count-2] < target:#原理和第11行代码一致,注释在第8行

                    continue

                c = b + 1                   #c为四个数值中的第三个数,也就是左指针

                d = count - 1               #d为四个数值中的第四个数,也就是右指针

                while c < d:

                    sigma = nums[a] + nums[b] + nums[c] + nums[d]

                    if sigma > target:

                        d -= 1

                    elif sigma < target:

                        c += 1

                    else:

                        if res.count([nums[a], nums[b], nums[c], nums[d]]) == 0:

                            res.append([nums[a], nums[b], nums[c], nums[d]])

                        c += 1

                        d -= 1

        return res

 


http://www.ppmy.cn/news/625391.html

相关文章

HttpRunner自动化工具之YAML文件简介

yaml文件简介&#xff1a; Yet Another Markup Language &#xff1a;另一种标记语言。yaml 是专门用来写配置文件的语言&#xff0c;非常简洁和强大,更直观&#xff0c;更方便&#xff0c;有点类似于json格式。 在自动化测试框架中&#xff0c;常应用于自动化测试过程&#xf…

Docker部署Minio

1、拉去minio镜像 docker pull minio/minio:latest2、运行以下命令部署minio&#xff1a; sudo docker run -p 9000:9000 -p 9001:9001 \-d --restartalways --userroot --privilegedtrue \-e "MINIO_ROOT_USERadmin" \-e "MINIO_ROOT_PASSWORDminio2023!&…

PC Windows Win11 Win10 微信打字卡顿问题解决

之前一直觉得微信聊天输入框 打字卡顿是电脑配置不行 直到换了 I7-10700K 任然很卡 而且试过其他软件一切正常 后面在网上找到相应配置解决卡顿问题 如下&#xff1a; 1、鼠标右击微信属性 --> 兼容性 --> 更改高SPI设置 2、勾选下图两项配置 确定 --> 确定后重启…

Win7环境Word 2013编辑文档慢、卡顿的解决方法

原帖&#xff1a;Win7环境Word 2013编辑文档慢、卡顿的解决方法 a. 禁用"硬件加速"&#xff1a; word选项--高级--显示--禁用硬件图形加速&#xff0c;把这个选中试试 b. 禁用‘子像素定位平滑屏幕上的字体’&#xff1a; word选项--高级--显示--使用子像素定位…

数值优化简介

数值优化这个名字来源于一本书&#xff0c;名为《Numerical Optimization》。 Numerical Optimization这两个单词传递了两个知识领域的概念&#xff1a; Optimization指的是数学概念上的优化&#xff0c;即求最优解&#xff0c;也可以理解为求函数的最小值的解&#xff1b; Num…

游戏专用Win10 64位 竞技超棒专业版

游戏专用Win10 64位 专业版 是小编专为游戏玩家准备的Win10镜像文件&#xff0c;系统经过优化&#xff0c;启动服务经过精心筛选&#xff0c;保证了系统的优化和稳定&#xff0c;这款系统集成了大家常见的驱动软件&#xff0c;在追求速度的基础上充分保留了原有的性能和兼容性&…

合金重组 Metal Mind V1.0.127最新中文学习版 单机游戏 游戏下载 免安装【388M】

“机器会思考吗&#xff1f;”&#xff08;Can Machines Think?&#xff09;——阿兰图灵 机器人法律 ● 第一法则 机器人不得伤害人类&#xff0c;或坐视人类受到伤害&#xff1b;● 第二法则 机器人必须服从人类命令&#xff0c;除非命令与第一法则发生冲突&#xff1b;●…

NTP服务设置开机自启启动失败

文章目录 前言一、NTP服务设置开机自启启动失败原因二、解决办法 前言 Linux服务器设置了ntpd开机自启动&#xff0c;重启服务器ntpd却没有自启动 一、NTP服务设置开机自启启动失败原因 原因&#xff1a;chrony服务与NTP服务冲突导致开机启动未生效 二、解决办法 关闭chrony服务…