论算法是如何优化的:四数之和

news2024/9/30 9:31:47

论算法是如何优化的:四数之和

心路历程

闲来无事,刷刷力扣,突然看到一道题目叫做四数之和,难度中等,心想,这不就是我大显身手的时候了吗???我直接就是一个点击进入,看到题目,我懵了,这…好像除了暴力解法想不到怎么做,于是转身想要离开,就在离开之际,我转念一想,看看评论,就一眼,进去定睛一看,情形如下:
在这里插入图片描述
此题必有蹊跷!!!通关率为 37.7% 的一道题目,这样的评论已经刷屏,但是!!! 我用的是python,此等难题,必然不是能够阻挡我的借口,那岂不是说???只要没有这个问题,那通过率岂不是高到起飞,于是!!我打算来此大展身手,小垃圾题目,给我过!!!!
于是便有了下面的内容…先看一下题目介绍吧。


题目介绍:四数之和

难度:中等

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

  1. 0 < = a , b , c , d < n 0 <= a, b, c, d < n 0<=a,b,c,d<n
  2. a 、 b 、 c a、b、c abc d d d 互不相同
  3. n u m s [ a ] + n u m s [ b ] + n u m s [ c ] + n u m s [ d ] = = t a r g e t nums[a] + nums[b] + nums[c] + nums[d] == target nums[a]+nums[b]+nums[c]+nums[d]==target

你可以按 任意顺序 返回答案 。

示例 1:

输入:nums = [1,0,-1,0,-2,2], target = 0
输出:[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]

示例 2:

输入:nums = [2,2,2,2,2], target = 8
输出:[[2,2,2,2]]

算法优化过程(心路历程)

版本1

上述就是题目的介绍,看到这样的题目,我思索再三,没什么好的办法,直接上一波四重循环遍历,由于题中表明不可能有重复的数组,那我直接对每次要放进去的列表来一波排序,之后判断改列表是否在返回的答案中,如果没有才进行添加。

在这里插入图片描述
不出意外,果然超时,可恶啊!!!

版本2

不过我不死心,回想评论区有hxd说再来5个数,我也是5层循环,我抱着循环必过心里,对代码进行初步优化,观测代码,我觉得在 O ( n 4 ) O(n^4) O(n4) 的时间复杂度里面,我用了排序,岂不是有 O ( n 4 l o g ( n ) ) O(n^4 log(n)) O(n4log(n)) 的时间复杂度!!!我慌的不行当即把他拿出去,改成了对整体数组排序,之后再进行循环。

在这里插入图片描述
果然!!!就算如此,根本于事无补。

版本3

马萨卡,就要这样结束了吗?不!!!!我直接一手头头看评论,看到了和三数之和类似,虽然我没刷过,但是我恍惚间想到了第一题:两数之和!!!!,没错,一定是二分查找,能把最内圈循环优化掉,说时迟那时快,我接一波冲。

在这里插入图片描述

我直接就是一波,过了!!!,然而一看时间,只击败了 5.1%,才5.1%????我如此辛苦做出来的题目,竟然才击败了5.1%,我不服!!!!(时间复杂度是截图到这边的,不然图片太长看不到,我这可不是盗图哈哈哈哈哈哈)

版本4

于是乎,我选择再次悄悄看一下评论,不,是官方题解!!!,他的方法叫做 排序 + 双指针,我一看,排序我已经实现,双指针怎么做,我用的是二分查找,有什么区别吗???有!!!那就是二分查找只能取消一层循环,但是双指针能取消两层循环,这波双指针就叫做头尾双指针,和盛最多水的容器这道题类似,这题我刷过!!!直接干。

在这里插入图片描述
过了过了!!!,时间提升到了52.57%,就当我打算适可而止的时候,发现在统计提交时间的柱状图里面,最前面为什么会有那么高的比例,而且比我的时间还少一大截,难道还有优化???

版本5

我抱着怀疑的心态,去细细查看官方题解,上面是这么说的:

在这里插入图片描述
这也是我为什么写这篇文章的意义,可能在实际算法设计以及实现时,剪枝操作也是必不可少的,于是便有了下面的代码。

在这里插入图片描述

可以看到上述,我添加了官方题解中的剪枝策略,并且!!!我把确定第一个数判断最小的四个值之和大于目标值放到了最外面判断,因为!!!如果在里面判断,但凡第一次判断最小的四个值之和小于目标值,那么后续不管第一个数怎么变换,值一定小于,所以不需要放到里面,放在里面反而在小于的时候多判断n-3次,我可太机智了!!!
对了,还有数据量小于4直接返回空即可,可以不进行排序操作。
但是尽管如此,我的 300+ms 还是和 60+ms 有不少的差距。

版本6

于是,我又又又去看了官方题解,有没有什么遗漏,果然!!!

在这里插入图片描述
于是乎,我再次对代码进行修改,结果如下:
在这里插入图片描述
终于!!!功夫不负有心人,进行了6个版本的改进,时间从超时变成了击败97.57%!!!!这就是这道算法题的优化过程。
记录此次解题经历不仅是为了对解题过程的记录,还为了提醒自己以及在座的兄弟们,优化来自多个方面,算法只不过是优化的一部分,除去算法,设立一定的决策条件也是必不可少的。
当然不止如此。就好比我把所有的测试用例的结果都写出来之后用字典返回结果的速度肯定比这个更快哈哈哈。
这就是本次分享的全部内容,溜了溜了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/55129.html

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

相关文章

2022 CMU15-445 Project 1 Buffer Pool

通过截图 Task #1 - Extendible Hash Table 该 task 的知识点名为 可扩展动态散列 https://cloud.tencent.com/developer/article/1020586 这个部分要实现一个 extendible 哈希表&#xff0c;内部不可以用 built-in 的哈希表&#xff0c;比如 unordered_map。这个哈希表在 Buf…

Open-Dis的C++版本编译(CMake-gpu 3.21.4)以及SDL2和SDL_net库的配置使用

目录Open-DisOpen-Dis简介分布式交互仿真更多资料Open-Dis下载CMake编译教程SDL2和SDL_netSDL介绍下载SDL配置SDL2下载SDL_net配置SDL_net工程编译Open-DisOpen-Dis Open-Dis简介 Dis是国防部&#xff0c;北约和联合国实时/虚拟世界建模和仿真中使用最广泛的协议之一。 Open-…

关于二进制

关于二进制 读《程序是怎样跑起来的》 用二进制表示计算机信息的原因 计算机内部是由IC&#xff08;集成电路&#xff09;这种电子部件构成的。CPU和内存也是IC的一种&#xff0c;IC有几种不同的形状&#xff0c;有的像一条黑色的蜈蚣&#xff0c;在其两侧有数个乃至数百个引脚…

智慧水务:数字孪生污水处理厂,3D可视化一键管控

近年来&#xff0c;智慧水务、数字水务成为水务行业的热点领域。对于污水处理领域&#xff0c;如何贯彻落实双碳战略&#xff0c;积极推进智慧水厂建设&#xff0c;显得尤为关键。 可视化技术结合视频融合、BIM、5G、物联网、云计算及大数据等先进技术&#xff0c;围绕水质达标…

用DIV+CSS技术制作个人博客网站(web前端网页制作课期末作业)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

【Docker】搭建MySQL主从复制,详细的图文展示

Docker是基于Go语言实现的云开源项目。Docker的主要目标是**“Build&#xff0c;Ship and Run Any App,Anywhere”**。也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理&#xff0c;使用户的APP&#xff08;可以是一个WEB应用或数据库应用等等&#xff09;及其运…

[附源码]JAVA毕业设计计算机散件报价系统(系统+LW)

[附源码]JAVA毕业设计计算机散件报价系统&#xff08;系统LW&#xff09; 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技…

技巧 | Python绘制2022年卡塔尔世界杯决赛圈预测图

文章目录&#x1f3f3;️‍&#x1f308; 1. 世界杯三十二强&#x1f3f3;️‍&#x1f308; 2. 世界杯十六强&#x1f3f3;️‍&#x1f308; 3. 世界杯八强&#x1f3f3;️‍&#x1f308; 4. 世界杯四强&#x1f3f3;️‍&#x1f308; 5. 决赛圈&#x1f3f3;️‍&#x1f…

技术内幕 | 阿里云EMR StarRocks 极速数据湖分析

作者&#xff1a;阿里云智能技术专家 周康&#xff0c;StarRocks Active Contributor 郑志铨&#xff08;本文为作者在 StarRocks Summit Asia 2022 上的分享&#xff09; 为了能够满足更多用户对于极速分析数据的需求&#xff0c;同时让 StarRocks 强大的分析能力应用在更加广…

【温故而知新】构建高可用Linux服务器(三)

时间&#xff1a;2022年12月02日 作者&#xff1a;小蒋聊技术 邮箱&#xff1a;wei_wei10163.com 微信&#xff1a;wei_wei10 前言 大家好&#xff0c;欢迎来到小蒋聊技术。小蒋准备和大家一起聊聊技术的那些事。 今天小蒋继续坚持“温故而知新”的落地实践&#xff0c;继续…

[附源码]计算机毕业设计影院管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【单片机基础】C51语言基础

文章目录1、使用C/C开发单片机的优点2、C51中的基本数据类型3、C51数据类型扩展定义4、C51中的运算符与基础语句5、二进制与十六进制转换1、使用C/C开发单片机的优点 C/C语言作为一种非常方便的语言得到了广泛的支持&#xff0c;如STC、STM32、arduino、乐鑫科技的单片机都支持…

【目标搜索】基于matlab运动编码粒子群算法优化 (MPSO) 无人机搜索丢失目标【含Matlab源码 2254期】

⛄一、运动编码粒子群算法简介 1 粒子群算法 PSO算法是一种基于群体智能的随机优化方法。在PSO中&#xff0c;粒子群模拟鸟群行为在搜索空间中探索&#xff08;全局搜索&#xff09;和开发&#xff08;局部搜索&#xff09;&#xff0c;最终找到全局最优解。粒子的速度和位置更…

网络安全观察报告 攻击态势

设备类漏洞从未缓解 从图 5.1 中可以看到&#xff0c;针对设备漏洞的攻击占全部利用漏洞攻击的 43%&#xff0c;这和近两年智能路由器等 联网设备大规模增长密切相关。正如绿盟科技在《2017 年物联网报告》1 中提到的那样&#xff0c;很多智能设备 在设计之初&#xff0c;安全…

第3章 Thymeleaf模板渲染

文章目录第3章 Thymeleaf模板渲染3.2 Thymeleaf编程起步3.4 读取资源文件3.5 路径处理3.6 内置对象操作支持3.7 对象输出3.8 页面逻辑处理3.9 数据迭代处理3.10 包含指令3.11 Thymeleaf数据处理3.12 本章小结3.12 本章小结第3章 Thymeleaf模板渲染 3.2 Thymelea…

【OpenCV-Python】教程:3-13 Hough直线变换

OpenCV Python Hough直线变换 【目标】 理解Hough变换的概念学会使用Hough变换检测直线cv2.HoughLines(), cv2.HoughLinesP() 【理论】 Hough 变换是一个非常有用的技术&#xff0c;可以检测任何形状&#xff0c;只要那个形状可以通过数学方程表示出来&#xff0c;即使检测…

[附源码]计算机毕业设计springboot小区疫情事件处理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

传感器_三相-双极性-开关型-霍尔传感器 速度+电角度解算理解

1 前言 最近项目上涉及到使用三相-双极性-开关型-霍尔传感器解算 电机转速 、电角度的问题。结合自己的理解请教前辈&#xff0c;终有所得&#xff0c;下面做一个学习的记录。 主要以思路为主&#xff0c;不涉及代码。 2 正文 2.1 什么是三相&#xff1f; 所谓三相-双极性-…

毕设项目 - SSM农业商品信息管理权限后台子系统(含源码+论文)

文章目录1 项目简介2 实现效果2.1 界面展示3 设计方案3.1 概述3.2 系统流程3.3 系统结构设计4 项目获取1 项目简介 Hi&#xff0c;各位同学好呀&#xff0c;这里是M学姐&#xff01; 今天向大家分享一个今年(2022)最新完成的毕业设计项目作品&#xff0c;【基于SSM的农业商品…

(算法设计与分析)第四章贪心算法-第一节:贪心算法概述

文章目录一&#xff1a;贪心算法&#xff08;1&#xff09;概述&#xff08;2&#xff09;特点&#xff08;3&#xff09;框架二&#xff1a;典型贪心算法问题&#xff08;1&#xff09;无重叠区间①&#xff1a;题目描述②&#xff1a;解题思路③&#xff1a;完整代码&#xf…