当前位置: 首页 > news >正文

前端入门必刷题,经典算法—两数之和

在这里插入图片描述

优美的前⾔

年轻的码农哟~ 你是不是⼀直在思考⾃我提升的问题~
思来想去,决定从算法抓起(单押)~
拿起⼜放下,经历过多少次放弃(单押 ✖ 2)~
决定了!这次让我来帮你梳理(单押 ✖ 3)!Skr~
在这里插入图片描述

坦诚相⻅吧,两数之和!

《两数之和》是算法学习过程中最最经典也是最最基础的⼀个问题。

⼒扣、⽜客等刷题⽹站排⾏最⾼的就是两数之和了,经典就有其经典的道理,《两数之和》因为本身并没有太⾼的难度,⽽且也能体现出⼀些算法的思想,所以作为⼊⻔必刷题来说,再合适不过了。

那么咱们先来看题目吧

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。

我们来详细分析一下题目,首先有一个给定的数组, 数组内有若干数字

var nums = [ 11, 15, 3, 8, 2, 6 ]

确定一个目标值

var target = 9

接下来就是需求分析

从给出的 nums 数组中找到两个数字, 两个数字的和是 target,有且只有一个唯一解,找到两个数字以后, 返回两个数字的下标

比如这里的答案就是 2 和 5,因为 nums[2] + nums[5] = 9 符合要求

作为一个入门的程序员, 一个小趴菜, 我都觉得这个玩意对于我来说实在是太简单了

明⽩了!挨个对⽐挨个找⼀遍不就得了,小小问题,难不倒真正的勇⼠,双重循环暴⼒解法奉上!

var twoSum = function(nums, target) {for (var i = 0; i < nums.length; i++) {for (var j = i + 1; j < nums.length; j++) {if (nums[i] + nums[j] === target) {return [ i, j ]}}}
}

完全没有问题, 搞定, 我真是太棒了
给我的小伙伴们看完这个答案以后, 我的嘴角微微上扬, 已经准备好接受大家的表扬了
在这里插入图片描述
等等,你们这是什么眼神, 我怎么了, 难道不对吗 ??

提交上去之后,分数并不⾼,说这种⽅法性能不好,暴⼒解法采⽤双重循环嵌套的话,虽然解决了问题,但是执⾏判断的次数⼤约是:(n-1) + (n-2) + (n-3) + … + 1次

从之前学过的时间复杂度来分析的话,暴⼒解法的时间复杂度⼤约是O(n(n-1))即O(n²-n),虽然时间复杂度⼩于O(n²),但是实际也没好到哪⼉去,当然分数不⾼咯。

好吧,好吧,真是拿你没有办法(扶眼镜)~,接下来,我们来转换思路,另辟蹊径!

秘法 · 空间换时间

所谓的空间换时间,其实指的就是,针对这样两层遍历的情况,我们可以在遍历的过程中,⼀边去判断,⼀边做存储,判断,找到了就返回,没找到,那就存起来等到下⼀次判断的时候看看是否能找的到

这样⼀边判断、⼀边存储的⽅式当然快咯,因为毕竟只需要遍历⼀次嘛,呐,举个栗⼦:

有⼀队⼩朋友,要找到他们做任务的搭档,我们就可以先挨个把⼩朋友叫过来(开始遍历),让他从⼀个本⼦上去找,看本 ⼦上的照⽚有没有⾃⼰的搭档(做判断)。
如果找到了,那⼩朋友就可以⼤声报告出来(返回结果),如果没找到呢,就把这个⼩朋友的照⽚贴在本⼦上,然后叫下⼀ 个⼩朋友进来找(存储后继续遍历)。
这样是不是性能和效率就⾼很多了,⾮常Nice,换个思路,果然有另外收获!

好了,开打,开打!代码奉上!

// 空间换时间解法
const twoSum = (nums, target) => {
// 创建⼀个Map对象的数据,键值对中键为数组中的元素与⽬标的差值,值为这个元素的索引
const map = new Map(); // 存储⽅式 {key使⽤⽬标差值=>值使⽤索引存储}
// 开始遍历数组
for (let i = 0; i < nums.length; i++) {
// 先算出当前这个元素匹配的元素应该是⼏
let diff = target - nums[i]
// ⼀边顺⼿做判断,找到啦!就返回
// 判断map中是否有符合⽬标差值的键名,有则返回对应的索引(map中对应的值)及当前遍历数组的索引
if (map.has(diff)) {
return [map.get(diff), i];}
// ⼀边做存储,没找到,就存起来!
// 如果map中没找到符合⽬标差值的键名,则将本次循环数组获取的数组元素作为键名,及索引作为键值写⼊到map中记录
map.set(nums[i], i);}
};

这次的⽅法,我们只⽤了⼀次循环,就解决了问题,时间复杂度当然就是O(n)咯,只是在函数运⾏的过程中,创造了⼀个 map对象在占⽤内存空间,虽然函数之后map对象被回收了,但是总的来说是消耗了⼀些内存的。
但是虽然计算的时候占⽤了内存,但是⾮常明显的提⾼了效率和性能,ok,ok,得偿所愿!

最后画重点!

所以说,所谓的空间换时间,真的⾮常适合⽤在⼀些查找类的算法需求中,以后再碰到这样的需求,我们不要再研究双重循环嵌套查找啦,来尝试下空间!换!时间吧!

好了,这期经典算法–两数之和就介绍到这,你学废了吗?

少年!咱们下期再⻅ヾ( ̄▽ ̄)ByeBye

相关文章:

前端入门必刷题,经典算法—两数之和

优美的前⾔ 年轻的码农哟~ 你是不是⼀直在思考⾃我提升的问题~ 思来想去&#xff0c;决定从算法抓起&#xff08;单押&#xff09;~ 拿起⼜放下&#xff0c;经历过多少次放弃&#xff08;单押 ✖ 2&#xff09;~ 决定了&#xff01;这次让我来帮你梳理&#xff08;单押 ✖ 3&a…...

‘海外/国外‘地区微博签到shu据(正题在第二部分)

最近失眠&#xff0c;研究了项关于weibo爬虫的新功能&#xff0c;种种原因&#xff0c;大家可跳过第一部分的引用直接看第二部分。 内容来源&#xff1a;健康中国、生命时报、央视等​​​​ 失眠标准一&#xff1a;3个“30分钟” ● 入睡困难&#xff0c;从躺下想睡到睡着间隔…...

Springboot——SB整合Mybatis的CURD(基于注解进行开发)

此处是根据需求实现基本操作 上面这里涉及到了条件分页查询&#xff0c;还有增加和批量删除员工信息&#xff0c;右边编辑就是先查询后更新操作&#xff0c;叫做查询回显&#xff0c;然后在原有基础上进行更新 环境准备 在下面的入门案例的整体环境下把数据库表换成empSpring…...

现在大专生转IT可行吗?

当然可行的。 大专也是人&#xff0c;为什么不可以选择喜欢的专业学习&#xff0c;现在大学生遍地都是&#xff0c;学历已经不是限制你发展的因素了。有的人就是不擅长理论学习&#xff0c;更喜欢技术。IT也只是一个普普通通的技术行业&#xff0c;跟其他技术行业一样&#xf…...

XC7A50T-1CSG324I、XC7A50T-2CSG324I Artix-7 FPGA可编程门阵列

Artix-7 FPGA能够在多个方面实现更高的性价比&#xff0c;这些方面包括逻辑、信号处理、嵌入式内存、LVDS I/O、内存接口&#xff0c;以及收发器。MicroBlaze CPU针对Xilinx FPGA进行了优化&#xff0c;是一种可高度配置的32位RISC处理器&#xff0c;可为微控制器、实时处理器和…...

linux安装图片处理软件ImageMagick

下载地址&#xff1a; wget https://download.imagemagick.org/archive/ImageMagick-7.1.1-4.tar.gz 或者 wget --no-check-certificate https://download.imagemagick.org/archive/ImageMagick-7.1.1-4.tar.gz 安装命令&#xff1a; tar -zxvf ImageMagick-7.1.1-4.tar.…...

【Java基础】JavaCore核心-反射技术

文章目录1.什么是反射技术2.反射-获取类对象方式3.反射-获取声明构造器4.反射-对象创建实战5.反射-方法和属性实战6.反射-属性值操作实战7.反射-invoke运行类方法1.什么是反射技术 Java的反射&#xff08;reflection&#xff09;机制是指在程序的运行状态中 可以构造任意一个类…...

AWGN后验估计下的均值与协方差关系(向量和标量形式)

文章目录AWGN信道向量模型后验均值与协方差的关系从实数域拓展到复数域小结AWGN信道向量模型 考虑一个随机向量x∼pX(x)\boldsymbol x \sim p_{\boldsymbol X}(\boldsymbol x)x∼pX​(x)&#xff0c;信道模型为 qxv,v∼N(0,Σ)\boldsymbol q \boldsymbol x \boldsymbol v, \…...

Linux常用命令之文件搜索命令

1、常用搜索-find 命令find英文原意find所在路径/bin/find执行权限所有用户功能描述文件搜索语法find [搜索范围] [搜索条件] (默认准确搜索)范例find /etc -name init?? 常用的搜索条件的选项包括&#xff1a; -name&#xff1a;按照文件名进行匹配查找&#xff0c;例&…...

ChatGPT给软件测试行业带来的可能

软件测试在软件开发过程中扮演着至关重要的角色&#xff0c;因为它可以确保软件的质量和可靠性。而随着人工智能技术的不断发展&#xff0c;ChatGPT作为一个强大的自然语言处理工具&#xff0c;可以在软件测试中发挥出许多重要的作用。本文将介绍ChatGPT在软件测试应用中带来的…...

Cadence Allegro 导出Properties on Nets Report报告详解

⏪《上一篇》   🏡《上级目录》   ⏩《下一篇》 目录 1,概述2,Properties on Nets Report作用3,Properties on Nets Report示例4,Properties on Nets Report导出方法4.1,方法14.2,方法2B站关注“硬小二”浏览更多演示视频...

JAVA代码 实现定位数据动态聚集并绘制多边形区域

文章目录思路1、限制聚合距离2、绘制多边形区域3、多边形区域之间合并4、多边形定边点4、逻辑流程一些性能上的优化1、多边形设置圆心2、采用分支合并思路3、清理聚集较分散区域合理性处理1、解决多边形内凹角问题2、解决定边点插入位置问题3、多边形区域扩展成果展示最近有根据…...

基于储能进行调峰和频率调节研究【超线性增益的联合优化】(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

体验 Linux 的几个监控命令(htop、nmon、netdata)

体验 Linux 的几个监控命令htopnmonnetdatahtop 安装&#xff0c; sudo dnf install -y htop使用&#xff0c; htopnmon 安装&#xff0c; sudo dnf install -y nmon使用&#xff0c; nmon输入c&#xff0c; 输入C&#xff0c; 输入m&#xff0c; 输入n&#xff0c; 输入…...

NOC大赛2022NOC软件创意编程初赛图形化小低组(小学高年级组)

一、选择题 1.如果要控制所有角色一起朝舞台区右侧移动,下面哪个积太块是不需要的 2.要想让三个角色一起移动起来,下面哪个积木块没有作用 ? 3.小猴按照下面的程序前进,小猴最后一次前进了()步。 4.小可同学写了一个画笔程序画出花朵,但是运行后什么都看不到,不可…...

python进行股票收益率计算和风险控制的实现

股票收益率计算和风险控制的实现 在进行股票投资时&#xff0c;计算收益率和进行风险控制是非常重要的。本文将介绍一个与此相关的函数&#xff1a;radio_day_cal()。 radio_day_cal()函数 def radio_day_cal(last_day, sheet_name, df_dict, code_list, new_list):i 0days…...

自从有了这套近4000页的开发文档后,Java面试路上就像开了挂一样

Java是世界最流行的编程语言&#xff0c;也是国内大多数IT公司的主流语言。招聘网站上Java岗位众多&#xff0c;Java工程师似乎不愁找工作。但仔细一看就会发现&#xff0c;Java岗位的招聘薪酬天差地别&#xff0c;人才要求也是五花八门。而在Java工程师求职过程中&#xff0c;…...

Python文件操作

目录 一、文件操作介绍 二、文件的打开和关闭 三、文件的读写 四、文件文件夹相关操作 五、test 一、文件操作介绍 文件 : python中文件是对象 Liunx 文件 : 一切设备都可以看成是文件 磁盘文件 管道 网络Socket 文件属性: 读 写 执行权限 就是把一些存储存放起来&…...

036:cesium加载GPX文件,显示图形

第036个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中加载GPX文件, 显示图形。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共83行)相关API参考:专栏目标示例效果 配置方式 1)查看基础设置:https:/…...

【AI探索】我问了ChatGPT几个终极问题

终于尝试了一把ChatGPT的强大之处&#xff0c;问了一下关心的几个问题&#xff1a; chatGPT现在在思考吗&#xff1f;有没有什么你感兴趣的问题&#xff1f; 你认为AI会对人类产生哪些方面的影响&#xff1f; 你对人类所涉及到的学科有了解吗&#xff1f;你认为在哪些方面与人类…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构&#xff1a;基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中&#xff08;图1&#xff09;&#xff1a; mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制

使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下&#xff0c;限制某个 IP 的访问频率是非常重要的&#xff0c;可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案&#xff0c;使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...

MySQL 主从同步异常处理

阅读原文&#xff1a;https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主&#xff0c;遇到的这个错误&#xff1a; Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一&#xff0c;通常表示&#xff…...

深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏

一、引言 在深度学习中&#xff0c;我们训练出的神经网络往往非常庞大&#xff08;比如像 ResNet、YOLOv8、Vision Transformer&#xff09;&#xff0c;虽然精度很高&#xff0c;但“太重”了&#xff0c;运行起来很慢&#xff0c;占用内存大&#xff0c;不适合部署到手机、摄…...

Leetcode33( 搜索旋转排序数组)

题目表述 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...