《画解算法》1.两数之和【python实现】

🍅 作者主页:不吃西红柿

🍅 简介:CSDN博客专家🏆、信息技术智库公号作者✌。简历模板、职场PPT模板、技术难题交流、面试套路尽管【关注】私聊我。

🍅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!

  

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

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

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

示例 1:

输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

示例 2:

输入:nums = [3,2,4], target = 6
输出:[1,2]

示例 3:

输入:nums = [3,3], target = 6
输出:[0,1]

 

1.暴力求解

两层循环,外层循环枚举(或称作选中一个标杆),内层循环从枚举值之后开始遍历,计算两数的和是否等于target。如果找到了两个数,那么返回这两个数的下标。

for(int i = 0; i < n - 1; ++i) {for(int j = i + 1; j < n; ++j ) {if nums[i] + nums[j] == target...}
}


暴力求解的算法时间复杂度为指数级,也就是O(n^2)

分析暴力求解,我们发现存在重复搜索的情况,也就是对数组中的部分数据搜索了多次。那如何只对数组中的数据搜索1次(或常数级),然后求解呢?

我们知道,寻找一个数是否存在,最快的方法是通过hash表,在O(1)的时间复杂度之内就可以判断是否存在某个数。

2.哈希表求解
可对数组遍历一次,然后将数据存入hash表,然后再遍历一次数组,查找 target - currentdata 是否存在hash表中,如果存在,那么我们就寻找到了两个数。 题目要求我们返回数组的下标,那么我们的hash表的key是数组元素的值,value是下标。

这种方法在最坏的情况下,对数组遍历了2次,也就是算法的时间复杂度是O(2n),去掉前导系数是O(n),虽然是相比暴力求解,算法的时间复杂度降低了,但是还有优化的空间。

在遍历数组并将数据放入hash表的同时,我们也可以find(target - currentdata)是否存在,如果存在那么就找到了满足条件的两个数。

find(9-4), 存在那返回这两个数的下标,如果不存在,那么将 4 放入hash表。

image.png

 
find(9-6), 存在那返回这两个数的下标,如果不存在,那么将 6 放入hash表。

image.png

 

在遍历到元素5的时候,我们find(9-5),找到了这两个数。

image.png

 


动画演示下这个过程

2021-06-06 222452.gif

 

代码实现

class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:hashtable = dict()for i, num in enumerate(nums):# ② map中查找是否有 target - curvalue的数据if target - num in hashtable:return [hashtable[target - num], i]# ① 数组中的每个数放入map中hashtable[nums[i]] = ireturn []

热门专栏推荐:

🥇 大数据集锦专栏:大数据-硬核学习资料 & 面试真题集锦 
🥈 数据仓库专栏:数仓发展史、建设方法论、实战经验、面试真题 
🥉 Python专栏:Python相关黑科技:爬虫、算法、小工具 

(优质好文持续更新中……)✍

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

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

相关文章

工业AI时代,大数据云平台未来5年迎最佳发展时机

来源&#xff1a;专知摘要&#xff1a;继德国工业 4.0 的提出&#xff0c;中国也确立了“中国制造 2025”的目标&#xff0c;工业 4.0 及物联网的概念在中国大地上遍地开花&#xff0c;整个行业也是红红火火。从工业大数据到智能制造&#xff0c;工业大数据云平台将为工业创新和…

噪音 - Perlin Noise

转载自&#xff1a;http://www.cnblogs.com/babyrender/archive/2008/10/27/BabyRender.html 说起perlin noise, 最初也就是在课上大概了解了一下, 知道是个生成仿真贴图的东西. 学的时候没怎么细想, 只是知道这个东西很快. 生成3d贴图很方便. 不过最近在做sampling的时候, 发现…

《画解算法》2.整数反转【python-简单】

&#x1f345; 作者主页&#xff1a;不吃西红柿 &#x1f345; 简介&#xff1a;CSDN博客专家&#x1f3c6;、信息技术智库公号作者✌。简历模板、职场PPT模板、技术难题交流、面试套路尽管【关注】私聊我。 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd;…

360:中国为什么没有自主研发的浏览器内核?

来源&#xff1a;360公司物联网智库 整理发布摘要&#xff1a;近日360公司发表题为《中国为什么没有自主研发的浏览器内核&#xff1f;》的文章&#xff0c;文章中写道&#xff1a;从0到1&#xff0c;从无到有&#xff0c;这是很多人理解的自主研发&#xff0c;按这个标准&…

用 WebClient 轻松实现文件下载上传、网页抓取

我们知道用 WebRequest&#xff08;HttpWebRequest、FtpWebRequest&#xff09; 和 WebResponse&#xff08;HttpWebResponse、FtpWebResponse&#xff09;可以实现文件下载上传、网页抓取&#xff0c;可是用 WebClient 更轻松。用 DownloadFile 下载网页using (System.Net.Web…

❤️ 炒 股 实 战丨原 地 起 飞 ❤️

郑重声明&#xff1a; 1、个人版可以免费获取交易数据进行分析&#xff0c;企业级大规模调用数据需要购买积分&#xff08;大家玩玩即可&#xff09; 2、为避免广告代言&#xff0c;本文将不会出现任何logo、链接和包&#xff0c;需要玩的主页私聊我&#xff01; &#x1f345…

人工智能研究的新前线:生成式对抗网络

林懿伦, 戴星原, 李力, 王晓, 王飞跃来源&#xff1a;科学网 摘要&#xff1a;生成式对抗网络&#xff08;Generative adversarial networks, GAN&#xff09;是当前人工智能学界最为重要的研究热点之一。其突出的生成能力不仅可用于生成各类图像和自然语言数据&#xff0c;还启…

WP7开发小技巧之快捷键

开发 Windows Phone 7 应用程式&#xff0c;开启用键盘输入的密技 1. 启用键盘输入 在模拟器里调试程序时&#xff0c;默认情况下是不能用电脑的键盘输入&#xff0c;但是调试如果能用PC键盘肯定能提高不少速度。其实微软已经为我们程序员做了这方面的工作&#xff0c;可以按如…

1.MySQL数据库的介绍

1.MySQL数据库的介绍 什么是数据库 数据库(Database)就是按照数据结构来组织&#xff0c;存储和管理数据的仓库 专业的数据库是专门对数据进行创建&#xff0c;访问&#xff0c;管理&#xff0c;搜索等操作的软件&#xff0c;比起我们自己用文件读写的方式对象数据进行管理更…

中国自动化学会平行智能专业委员会成立

摘要&#xff1a;2018年8月18日上午&#xff0c;中国自动化学会平行智能专业委员会成立大会在中国科学院自动化研究所报告厅隆重举行。2018年8月18日上午&#xff0c;中国自动化学会平行智能专业委员会成立大会在中国科学院自动化研究所报告厅隆重举行。中国科学院院士吴宏鑫教…

蚂蚁的天堂

当今各个社区都轰轰烈烈的展开灭蚁运动时&#xff0c;我却任由蚂蚁在窗台的花盆里做窝&#xff0c;看着它们辛勤的在高大植物的根茎上劳作&#xff0c;时不时的还帮我灭掉了植物上害虫的幼卵&#xff0c;我就很高兴有这么一群邻居&#xff0c;时不时的还送写肉碎过来&#xff0…

2008-2018,5个版本互联网大脑模型的演进与对比

2018年8月&#xff0c;我们绘制的第五个版本的互联网大脑模型图&#xff0c;新的版本相当于为互联网找到了左右大脑的机制-机器智能左大脑和群体智能右大脑。第五版的绘制距离2008年第一个版本正好10年。互联网大脑模型主要是针对1969年以来互联网的网状模型&#xff0c;在21世…

2.安装MySQL

2.安装MySQL Mac系统中安装MySQL 使⽤用Mac中的Homebrew进⾏行行mysql的安装 1.下载安装mysql brew install mysql5.7 如果看到以下界⾯面则表示已经下载安装成功 2.启动mysql mysql.server start 3.关闭mysql mysql.server stop 4.登录mysql mysql -u root -p Windows安…

正则判断字符串是否为数字

var re /^(-?\d)(\.\d)?$/; //判断字符串是否为数字 var re/^[A-Za-z0-9]$/; //字母和数字组合转载于:https://www.cnblogs.com/peterdys/archive/2012/10/19/2731502.html

3.认识和操作一下mysql的基本命令

3.认识和操作一下mysql的基本命令 登录mysql,在终端输入以下命令&#xff0c;进行登录 mysql -u root -pMacBook-Pro:~ yc$ mysql -u root -pEnter password:Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 4Server version: 5.7.28…

CNNIC互联网报告:中国网民超8亿 前沿科技进展显著

来源&#xff1a;新浪摘要&#xff1a;8月20日下午消息&#xff0c;中国互联网络信息中心(CNNIC)在京发布第42次《中国互联网络发展状况统计报告》。根据报告&#xff0c;截至2018年6月30日&#xff0c;我国网民规模达8.02亿&#xff0c;普及率为57.7%;手机网民规模达7.88亿&am…

以前看过一个压缩过的.exe,运行会播放长达半小时的动画,却只有60KB,个人认为其中的原理...

以前看过一个压缩过的.exe&#xff0c;运行会播放长达半小时的动画&#xff0c;而不重复&#xff0c;文件大小却只有60KB&#xff0c;个人认为其中的原理 1.主原理&#xff1a;该动画必是根据规则&#xff08;即公式&#xff09;生成的 2.启动时&#xff0c;根据公式&#xff0…

4.MySQL基础操作

4.MySQL基础操作 使用方法: 方式一: 通过在命令行敲命令来操作 ( 有助于命令的掌握)方式二: 通过图型界面工具,如 Navicat 等(在熟练掌握后再使用)方式三:通过编程语言(python,php,java,go...)执行mysql命令 SQL ( Structure query language ) 结构化查询语言 SQL语言分为4个…

OE模块常用表结构

so_headers_all&#xff1b;so_lines_all&#xff1b; 表名:ONT.OE_order_headers_all 说明:订单头 HEADER_ID NUMBER 订单头标识码 ORG_ID NUMBER OU ID ORDER_TYPE_ID NUMBER 订单类型ID ORDER_NUMBER NUMBER 订单编号 ORDERED_DATE DATE 定购日期 REQUEST_DATE DATE 客户要求…

19个人工智能(AI)热门应用领域,你知道多少?

来源&#xff1a;网络大数据摘要&#xff1a;自然语言生成是人工智能的分支&#xff0c;研究如何将数据转化为文本&#xff0c;用于客户服务、报告生成以及市场概述。01自然语言生成(Natural Language Generation)自然语言生成是人工智能的分支&#xff0c;研究如何将数据转化为…