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

news2024/11/15 14:22:10

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.coloradmin.cn/o/693569.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Openresty原理概念篇(十)为什么 lua-resty-core 性能更高一些

一 为什么 lua-resty-core 性能更高一些 ① 回顾 lua-resty-core和lua-nginx-module各自都有哪些API? --> 看下面两个仓库的文档 lua-nginx-module lua-resty-core 下面&#xff1a;一起看下Lua C API和FFI 的实现有何不同之处,这样可以对它们的性能有个直观认识…

14. python从入门到精通——GUI编程

目录 常用的GUI框架 wxPython&#xff1a;比较常用 PyQt6&#xff1a;比较常用 Kivy Flexx Tkinter 安装PyQt5 要开发PyQt5程序需要安装三个模块&#xff1a; 安装命令&#xff1a; 安装 安装命令&#xff1a; window安装&#xff1a; PyCharm软件安装&#xff1a…

Android跳转具体应用权限管理,三种方式

背景&#xff1a;Android越来越安全合规&#xff0c;在应用里&#xff0c;需要给用户所有可选择和取消的明确方式。 比如&#xff1a;设置了权限&#xff0c;也要给用户关闭权限的入口。被要求在应用的设置里&#xff0c;提供权限管理入口。 解决方式有三&#xff1a; 方式一…

ansible实训-Day2(ansible基本问题及部署安装)

一、前言 该篇是对ansible实训第二天内容的归纳总结&#xff0c;主要包括ansible的一些基本问题以及ansible的部署安装。 二、理论部分 Q1&#xff1a;什么是ansible Ansible是一种自动化IT工具&#xff0c;它可以帮助管理和自动化IT基础架构。使用Ansible&#xff0c;管理员…

神仙级编程神器,吹爆!

Visual Studio 编程领域公认的“最强IDE”&#xff0c;Visual Studio是目前最流行的Windows平台应用程序的集成开发环境&#xff0c;提供了高级开发工具、调试功能、数据库功能和创新功能&#xff0c;帮助在各种平台上快速创建当前最先进的应用程序&#xff0c;开发新的程序。 …

界面控件DevExpress ASP.NET中文 - 如何自定义编辑表单运行时布局?

在DevExpress ASP.NET控件v19.2版本中就针对ASP. NET WebForms和MVC平台的ASP. NET GridView和CardView控件添加了一个主要增强功能。 DevExpress ASP.NET v23.1正式版下载(Q技术交流&#xff1a;523159565&#xff09; 当您使用预定义的或 自定义的编辑表单时&#xff0c;经…

网易兑换礼包码分析

🍋前言 由于C站版权太多,所有的爬虫相关均为记录,不做深入! 接到了一个项目大概是电商老板想弄一个自动化工具,方便自己处理买家买的兑换码,一个一个的兑换有点累人,代码写到一半才发现由于自己的原因分析错了,刚刚开始我以为他的验证码是在html上的,就像这样 <…

SpringBoot02:运行原理初探

目录 一、运行原理探究 1、pom.xml文件 1.1、父依赖 1.2、启动器Spring-boot-starter 2、主启动类 2.1、默认的主启动类&#xff1a; 2.2、分析主启动类注解&#xff1a;SpringBootApplication 1、Target(ElementType.TYPE) 2、Retention(RetentionPolicy.RUNTIME) 3…

【C语言初阶(3)】循环语句:for 循环

文章目录 1. 语法结构2. for 语句的执行流程3. for 循环中的 break 和 continue3.1 for 循环中的 break3.2 for 循环中的 continue 4. for 循环语句的循环控制变量5. for 循环的变种5.1 for( ; ; )5.2. for 循环的嵌套5.3 使用多个变量控制循环 6. for 循环笔试题 1. 语法结构 …

【读书笔记】《数据结构C语言版》

目录 第一章 线性表 第二章 栈和队列 第三章 字符串 第四章 广义表 第五章 树 第六章 图 第七章 查找 第八章 内排序 第一章 线性表 一个线性表是n个数据元素的优先序列线性表可分为顺序存储结构&#xff08;数组&#xff09;和链式存储结构&#xff08;链表&#xff…

安科瑞WHD智能型温湿度控制器

安科瑞WHD智能型温湿度控制器 安科瑞 崔丽洁

前端Vue自定义发送短信验证码弹框popup 实现剩余秒数计数 重发短信验证码

前端Vue自定义发送短信验证码弹框popup 实现剩余秒数计数 重发短信验证码&#xff0c; 请访问uni-app插件市场地址&#xff1a;https://ext.dcloud.net.cn/plugin?id13207 效果图如下&#xff1a; 实现代码如下: # cc-codeDialog #### 使用方法 使用方法 <!-- show:是…

【uniapp】uniapp反向代理解决跨域问题

背景介绍 前段时间&#xff0c;在拿uniapp开发的时候&#xff0c;出现了跨域问题&#xff0c;按理说跨域应该由后端解决&#xff0c;但既然咱前端可以上&#xff0c;我想就上了&#xff08;顺手装个13&#xff09; 什么是跨域 出于浏览器的同源策略&#xff0c;在请求时&…

React 简单实现 v-if和v-show的元素控制效果

react中并没有直接的想模板引擎那样的命令可以直接控制元素展示 但是 我们了解了 v-if和v-show之后 还是大有文章的 我们在 项目的 src下创建 components 文件夹 创建dom.jsx 编写代码如下 import React from "react" export default class dom extends React.Comp…

Ubuntu查看显卡信息

查看显卡信息&#xff0c;终端输入 lspci | grep VGA 输出结果 0000:65:00.0 VGA compatible controller: NVIDIA Corporation Device 24b0 (rev a1) 发现是十六进制码&#xff0c;进入网址PCI Devices查询&#xff0c;输入 24b0 并点击 Jump&#xff0c;得到结果 显卡型号…

Inline Assembly 内联汇编总结

The language used for inline assembly in Solidity is called Yul. 在solidity中&#xff0c;用于写内联汇编的语言是Yul. Inline assembly is a way to access the Ethereum Virtual Machine at a low level. This bypasses several important safety features and checks …

中国信通院联合腾讯安全发布《数据安全治理与实践白皮书》

6月26日&#xff0c;由中国通信标准化协会和中国信息通信研究院联合主办的“2023大数据产业发展大会”在北京启幕&#xff0c;大会发布了多项中国信息通信研究院及相关机构在数智化领域最新研究和实践成果。 腾讯云安全总经理李滨出席了数据安全高质量发展论坛&#xff0c;分享…

【探测器】opencv显示探测器的raw图像

【探测器】opencv显示探测器的raw图像 1、背景2、代码3、下载 1、背景 对于探测器&#xff08;相对于可见光成像的相机&#xff0c;这里的探测器指的是对X光成像的相机&#xff09;。 RAW文件几乎是未经过处理而直接从CCD或CMOS上得到的信息。 RAW格式是无损格式&#xff0c;相…

剑指 Offer ! ! 34. 二叉树中和为某一值的路径

剑指 Offer 34. 二叉树中和为某一值的路径 给你二叉树的根节点 root 和一个整数目标和 targetSum &#xff0c;找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 输入&#xff1a;root [5,4,8,11,null,13,4,7,2,null,null,5,1],…