侵权投诉

Two Sum系列问题的核心思想

算法与数据结构 2019-11-27 16:04 次阅读

Two Sum系列问题在 LeetCode 上有好几道,这篇文章就挑出有代表性的两道,介绍一下这种问题怎么解决。

TwoSum I

这个问题的最基本形式是这样:给你一个数组和一个整数target,可以保证数组中存在两个数的和为target,请你返回这两个数的索引。

比如输入nums = [3,1,3,6],target = 6,算法应该返回数组[0,2],因为 3 + 3 = 6。

这个问题如何解决呢?首先最简单粗暴的办法当然是穷举了:

这个解法非常直接,时间复杂度 O(N^2),空间复杂度 O(1)。

更好一点的解法,可以通过一个哈希表减少时间复杂度:

这样,由于哈希表的查询时间为 O(1),算法的时间复杂度降低到 O(N),但是需要 O(N) 的空间复杂度来存储哈希表。不过综合来看,是要比暴力解法高效的。

我觉得 Two Sum 系列问题就是想教我们如何使用哈希表处理问题。我们接着往后看。

TwoSum II

稍微修改一下上面的问题,要求我们设计一个类,拥有两个 API:

class TwoSum {     // 向数据结构中添加一个数 number     public void add(int number);     // 寻找当前数据结构中是否存在两个数的和为 value     public boolean find(int value); }

如何实现这两个 API 呢,我们可以仿照上一道题目,使用一个哈希表辅助find方法:

进行find的时候有两种情况,举个例子:

情况一:如果连续 add 了 [3,2,3,5],那么freq是{3:2,2:1,5:1},执行find(6),由于 3 出现了两次,3 + 3 = 6,所以返回 true。

情况二:freq是{3:2,2:1,5:1},执行find(7),那么key为 2,other为 5 时算法可以返回 true。

除了上述两种情况外,find只能返回 false 了。

对于这个解法的时间复杂度呢,add方法是 O(1),find方法是 O(N),空间复杂度为 O(N),和上一道题目比较类似。

但是对于 API 的设计,是需要考虑现实情况的。比如说,我们设计的这个类,使用find方法非常频繁,那么每次都要 O(N) 的时间,岂不是很浪费费时间吗?对于这种情况,我们是否可以做些优化呢?

是的,对于频繁使用find方法的场景,我们可以进行优化。我们可以参考上一道题目的暴力解法,借助哈希集合来针对性优化find方法:

这样sum中就储存了所有加入数字可能组成的和,每次find只要花费 O(1) 的时间在集合中判断一下是否存在就行了,显然非常适合频繁使用find的场景。

三、总结

对于 TwoSum 问题,一个难点就是给的数组无序。对于一个无序的数组,我们似乎什么技巧也没有,只能暴力穷举所有可能。

一般情况下,我们会首先把数组排序再考虑双指针技巧。TwoSum 启发我们,HashMap 或者 HashSet 也可以帮助我们处理无序数组相关的简单问题。

另外,设计的核心在于权衡,利用不同的数据结构,可以得到一些针对性的加强。

最后,如果 TwoSum I 中给的数组是有序的,应该如何编写算法呢?答案很简单,前文 双指针技巧汇总写过:

int[] twoSum(int[] nums, int target) {     int left = 0, right = nums.length - 1;     while (left < right) {         int sum = nums[left] + nums[right];         if (sum == target) {             return new int[]{left, right};         } else if (sum < target) {             left++; // 让 sum 大一点         } else if (sum > target) {             right--; // 让 sum 小一点         }     }     // 不存在这样两个数     return new int[]{-1, -1}; }

原文标题:Two Sum 问题的核心思想

文章出处:【微信号:TheAlgorithm,微信公众号:算法与数据结构】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
分享:

评论

相关推荐

更智能的存储如何提升自动驾驶汽车的可靠性

自动驾驶汽车的问世将极大地改变我们的出行习惯,并在交通运输行业掀起一场迅猛的变革。汽车行业的数字化转....
发表于 02-19 11:49 417次 阅读
更智能的存储如何提升自动驾驶汽车的可靠性

F28377的CLA与CPU数据交换

在CPU定义了数组,并对其初始化。该数组定义在cputocla1ram上,调试发现,进入cla后我的数组莫名奇妙全变成0了,该数组我还加...
发表于 02-18 10:28 459次 阅读
F28377的CLA与CPU数据交换

软件定义存储控制器软件快速增长 迎来新机遇的同时也将遇到新挑战

IDC发布《中国存储软件市场季度跟踪报告,2019年上半年》。报告显示,2019年上半年,存储软件市....
发表于 02-12 09:32 165次 阅读
软件定义存储控制器软件快速增长 迎来新机遇的同时也将遇到新挑战

UFS 3.0标准测试参数公布,支持HS-G4规范

据介绍,新版本的规范支持三个新特性:写入增强器(Write Booster)、深度睡眠(Deep S....
的头像 牵手一起梦 发表于 02-07 15:24 633次 阅读
UFS 3.0标准测试参数公布,支持HS-G4规范

数据中心能源系统需要做好什么设计

数据中心在支撑“云大物移智链”技术改造能源系统的同时,全年保持不间断运行,其能耗强度极高。
发表于 02-07 12:25 248次 阅读
数据中心能源系统需要做好什么设计

半导体芯片领域又入新员 康佳正式进军存储芯片市场

康佳首款芯片产品是 KS6581A,这是一款嵌入式 eMMC 闪存主控,产品主要应用于智能手机、平板....
发表于 02-05 13:51 402次 阅读
半导体芯片领域又入新员 康佳正式进军存储芯片市场

三星推出第三代HBM2存储芯片,适用于高性能计算系统

日前,三星正式宣布推出名为Flashbolt的第三代HBM2(HBM2E)存储芯片。
的头像 牵手一起梦 发表于 02-05 13:49 692次 阅读
三星推出第三代HBM2存储芯片,适用于高性能计算系统

第三版HBM2存储标准发布,环比提升33%

按照设计规范,单Die最大2GB、单堆栈12 Die(无标准高度限制),也就是24GB容量,匹配10....
的头像 牵手一起梦 发表于 02-04 17:34 611次 阅读
第三版HBM2存储标准发布,环比提升33%

JEDEC发布UFS 3.1规范,可使UFS存储设备更接近SSD

根据消息报道,JEDEC已经发布了UFS 3.1规范,这些新功能有望进一步提高设备的性能,减少能耗,....
的头像 牵手一起梦 发表于 02-04 16:29 556次 阅读
JEDEC发布UFS 3.1规范,可使UFS存储设备更接近SSD

如何打造个人存储

黑群晖的要求: 1、硬件要求非常低,十几年前的老电脑亦可轻松运行; 2、1G以上的U盘一个,作为....
发表于 02-04 15:42 577次 阅读
如何打造个人存储

2019年最新的C语言基础知识合集整理

不管是班科生还是非班科生,在学习C语言的路途上是否感觉到困难,不知道如何入手C语言呢??那么接下来小....
的头像 Wildesbeast 发表于 02-04 15:05 465次 阅读
2019年最新的C语言基础知识合集整理

2020年内存与存储价格上涨趋势不变

许多内存与存储产品已经开始涨价,从年初到现在涨价幅度最高达 29%。看来,2020 年内存与存储价格....
发表于 02-03 17:56 2343次 阅读
2020年内存与存储价格上涨趋势不变

苹果翻新版iPad mini 5/Air 3出售,有多个应用版本可选

根据消息,苹果今天开始在美国销售官方认证翻新的第三代iPad Air和第五代iPad mini。翻新....
的头像 牵手一起梦 发表于 02-03 16:34 1082次 阅读
苹果翻新版iPad mini 5/Air 3出售,有多个应用版本可选

基于MCU的物联网应用实现数据和设计的安全性

本文将快速查看MCU的主要安全功能,你应该寻找在物联网为导向的设计。一旦你了解一些常见的功能,可以更....
发表于 02-03 12:36 313次 阅读
基于MCU的物联网应用实现数据和设计的安全性

“疫情”对存储产业的影响分析

由于存储产业与各电子行业息息相关,也难免受到疫情的影响。
发表于 02-02 11:12 1921次 阅读
“疫情”对存储产业的影响分析

康佳半导体存储主控芯片量产出货,市场考验才开始...

历时300多个日夜精心打磨,康佳半导体首款存储主控芯片KS6581A,首批10万颗量产出货。
的头像 荷叶塘 发表于 01-23 05:25 6454次 阅读
康佳半导体存储主控芯片量产出货,市场考验才开始...

牛津大学团队研发出新型存储单元,实现芯片级光通信

牛津大学设计了一种新型计算机存储单元,可以同时通过电和光信号对其进行访问或写入,大幅度提升了带宽和功....
发表于 01-21 08:38 877次 阅读
牛津大学团队研发出新型存储单元,实现芯片级光通信

下一个十年的存储趋势是怎样的(下)

下一个十年随着云计算、大数据、人工智能、物联网等新技术的快速发展,分布式、全闪存等迎来市场的高速发展....
发表于 01-18 17:26 135次 阅读
下一个十年的存储趋势是怎样的(下)

下一个十年的存储趋势是怎样的(上)

软件定义存储,为云而生。软件定义存储就是将硬件的可操控成分按需求,分阶段的,通过编程接口或者以服务的....
发表于 01-18 17:21 352次 阅读
下一个十年的存储趋势是怎样的(上)

面对数字世界的新十年 浪潮存储俨然已经蓄势待发

过去十年堪称是数据爆炸的十年。回顾2010年的行业报告时你会发现,2010年全球数据量刚刚突破1ZB....
发表于 01-17 17:43 425次 阅读
面对数字世界的新十年 浪潮存储俨然已经蓄势待发

2020年存储行业有什么趋势走向

存储业将继续开发安全的传输设备,以替代昂贵且受带宽限制的网络传输,并持续优化机器学习,将计算设备与边....
发表于 01-17 15:36 245次 阅读
2020年存储行业有什么趋势走向

长江存储64层3D NAND实现量产 意图打破全球垄断局面

1 月 16 日讯,据悉,长江存储科技有限责任公司 副董事长杨道虹表示,2019 年,国家存储器基地....
发表于 01-16 14:06 280次 阅读
长江存储64层3D NAND实现量产 意图打破全球垄断局面

高性能SSD硬盘之间的比较

像内存(DRAM)一样,闪存通过检测存储单元中是否存在电荷来工作。闪存使用的存储结构与内存不同,一旦....
发表于 01-16 11:36 223次 阅读
高性能SSD硬盘之间的比较

长江存储64层闪存已量产 预计会有更多的储存产品用上国产芯片

长江存储科技有限责任公司副董事长杨道虹表示,国家存储器基地项目经过 3 年的建设已经取得了阶段性成效....
发表于 01-16 10:27 305次 阅读
长江存储64层闪存已量产 预计会有更多的储存产品用上国产芯片

云计算数据保护的状态怎样来做到提高

大多数数据保护解决方案使用公共云平台,以降低本地数据保护基础设施的成本。
发表于 01-15 17:00 205次 阅读
云计算数据保护的状态怎样来做到提高

RFID系统比较适合哪一种频率

使用的频段范围为 1 0 K H z ~ 1 M H z ,常见的主要规格有125KHz、135KH....
发表于 01-15 16:05 213次 阅读
RFID系统比较适合哪一种频率

2019年存储芯片市场显著恶化 拖累了全球半导体市场下滑11.9%

2018年全球半导体市场在内存、闪存大涨两年之后达到了巅峰,2019年随即转向熊市,内存、闪存各种跌....
的头像 lyj159 发表于 01-15 15:09 1160次 阅读
2019年存储芯片市场显著恶化 拖累了全球半导体市场下滑11.9%

现在的物联网潜力发挥出来了吗

将物联网数据完全放到“黑匣子”里可能会使你难以从数据中获得额外和/或意外的价值。相反,将数据存储到基....
发表于 01-15 14:17 148次 阅读
现在的物联网潜力发挥出来了吗

存储技术更加注重技术的升级 2020年中国大陆存储将进入丰年

与2018 年的并购、建厂、扩产、投产相比,到目前为止,今年的存储器领域并未出现大规模的并购建厂,而....
发表于 01-15 11:15 221次 阅读
存储技术更加注重技术的升级 2020年中国大陆存储将进入丰年

LabVIEW初级教程之数组和簇的详细资料说明

在编程中,有时将相关数据归为一组很有用。在LabVIEW中使用数组和簇将相关数据归为一组。数组将相同....
发表于 01-15 09:59 116次 阅读
LabVIEW初级教程之数组和簇的详细资料说明

LabVIEW初级教程之数组和簇的相关例程免费下载

本文档的主要内容详细介绍的是LabVIEW初级教程之数组和簇的相关例程免费下载。
发表于 01-15 09:59 98次 阅读
LabVIEW初级教程之数组和簇的相关例程免费下载

三星Galaxy S20 Ultra 5G将具有三种存储版本,并支持1TB存储卡扩展

今日凌晨,XDA主编Max Winebach爆料称,三星Galaxy S20 Ultra 5G将保留....
的头像 牵手一起梦 发表于 01-14 14:15 952次 阅读
三星Galaxy S20 Ultra 5G将具有三种存储版本,并支持1TB存储卡扩展

群联以QLC为主题 展示了16T QLC及SLC+QLC混合固态硬盘产品

PHISON群联是一家存储解决方案供应商,不直接销售固态硬盘产品,而是向各家固态硬盘厂商提供包括主控....
发表于 01-14 09:36 178次 阅读
群联以QLC为主题 展示了16T QLC及SLC+QLC混合固态硬盘产品

独特的物联网设备怎样去创建

物联网设备包括智能手表和健身追踪器、智能家居传感器、自动驾驶汽车等。虽然许多利基市场已经饱和,但其他....
发表于 01-13 16:32 512次 阅读
独特的物联网设备怎样去创建

酷冷至尊推出NC100迷你主机,支持最多3个M.2 NVMe存储设备

根据消息报道,酷冷至尊在CES 2020上推出了NC100迷你主机,采用了英特尔幽灵峡谷NUC 9的....
的头像 牵手一起梦 发表于 01-13 14:27 994次 阅读
酷冷至尊推出NC100迷你主机,支持最多3个M.2 NVMe存储设备

物联网会给建筑业带来什么

由于建筑商的IT预算非常低,因此如何在资源有限的情况下最大限度地利用物联网成为了一个挑战。
发表于 01-10 16:48 73次 阅读
物联网会给建筑业带来什么

外置存储的增长进一步放缓 成熟企业级存储市场平稳增长

IDC中国于近日发布《中国企业级外部存储市场季度跟踪报告,2019年第三季度》。报告显示,中国企业级....
发表于 01-10 09:16 104次 阅读
外置存储的增长进一步放缓 成熟企业级存储市场平稳增长

颠覆性存储技术有哪几种

存储技术的进步主要是以容量和速度来衡量的。近年来,通过使存储变得更智能、更灵活且更易于管理的先进新技....
发表于 01-09 11:52 107次 阅读
颠覆性存储技术有哪几种

大数据时代离得开数据仓库吗

数据仓库的一般概念非常简单:从支持业务流程的操作系统中定期提取数据副本,并将其加载到单独的存储库中,....
发表于 01-09 10:10 144次 阅读
大数据时代离得开数据仓库吗

HCI于数据存储之上有什么可能

无论是边缘化、云计算,还是人工智能(AI)与物联网(IoT)都是从数据存储作为源点,反之也作用于存储....
发表于 01-08 15:58 164次 阅读
HCI于数据存储之上有什么可能

5G时代的手机还需要很大的内存吗

随着5G通信的落地应用,未来通过网络来存储各种数据资源会更方便,但是这并不意味着本地存储就失去了意义....
发表于 01-08 15:40 325次 阅读
5G时代的手机还需要很大的内存吗

为什么说LDPC码不适合工业存储

LDPC 码是闪存控制器的纠错中的普遍代码。它们非常适合可接受偶发错误的消费性产品使用。
发表于 01-08 14:56 163次 阅读
为什么说LDPC码不适合工业存储

第二大闪存厂铠侠工厂又传火警 全球闪存市场或将受到影响

2020年伊始,三星位于韩国华城的多座晶圆厂遭遇意外断电,在UPS电源的支持下只停了三分钟,已经够让....
发表于 01-08 14:19 208次 阅读
第二大闪存厂铠侠工厂又传火警 全球闪存市场或将受到影响

云存储的功能_云存储的优点和隐患

提高了存储效率,通过虚拟化技术解决了存储空间的浪费,可以自动重新分配数据,提高了存储空间的利用率,同....
发表于 01-08 10:45 163次 阅读
云存储的功能_云存储的优点和隐患

对闪存市场来说 最大的变数是国产的YMTC长江存储

在CES展会上,SK海力士正式宣布了128层堆栈的4D闪存(本质还是3D闪存,4D只是商业名称),已....
发表于 01-08 08:41 252次 阅读
对闪存市场来说 最大的变数是国产的YMTC长江存储

12月威刚NAND Flash维持出货高档 2020年需求有望持续扩大

存储现货价格止跌回升,带动存储模组厂威刚去年12月营收新台币24.8亿元(下同),年增19.03%、....
的头像 刘伟DE 发表于 01-08 08:08 1287次 阅读
12月威刚NAND Flash维持出货高档 2020年需求有望持续扩大

企业级闪存技术将会用在哪里

企业闪存技术随着NVMe架构、QLC驱动器和存储类内存的发展而不断发展,新的选项将使数据中心能够扩展....
发表于 01-07 14:56 119次 阅读
企业级闪存技术将会用在哪里

云计算的总体拥有成本怎样算出来

要了解组织的云计算财务模型,第一步是分配一个公共资源单元以标准化总体拥有成本(TCO)比较中的数据。
发表于 01-07 14:42 165次 阅读
云计算的总体拥有成本怎样算出来

IBM存储跨越“混合多云+AI”的鸿沟 让数据与业务紧密结合起来

“第一座大山”就是持续增长的数据量。IDC预测,中国的数据圈(每年被创建、采集或是复制的数据集合)从....
发表于 01-07 11:08 116次 阅读
IBM存储跨越“混合多云+AI”的鸿沟 让数据与业务紧密结合起来

labview数组怎么用类似于簇解除捆绑的办法把一位数组拆分为单个的数值

怎么用类似于簇解除捆绑的办法一下吧一位数组拆分为单个的数值,元素的个数已知 ...
发表于 01-06 22:01 192次 阅读
labview数组怎么用类似于簇解除捆绑的办法把一位数组拆分为单个的数值

三星互式图形流的信息存储介质方法

三星公司提出的包含交互式图形流的信息存储介质很好的节省了存储空间,提出了共享流的概念,将多个菜单流中....
的头像 汽车玩家 发表于 01-06 17:26 666次 阅读
三星互式图形流的信息存储介质方法

宏碁ConceptD 700工作站推出,将于3月在欧洲上市,售价1700欧元

借助Intel Xeon E处理器和NVIDIA Quadro RTX 4000图形显卡,Conce....
的头像 牵手一起梦 发表于 01-06 16:06 877次 阅读
宏碁ConceptD 700工作站推出,将于3月在欧洲上市,售价1700欧元

《求助》如和將1緯數組中相鄰元素相等的數提出來重新組成一個數組

本人菜鳥。 目前遇到一個問題,有一個一緯數組,裡面有很多相鄰的元素的值是相同的,我需要把相鄰且相同的值提出來組成一個新的...
发表于 01-02 10:16 244次 阅读
《求助》如和將1緯數組中相鄰元素相等的數提出來重新組成一個數組

双重FOR循环终止,里面的终止了,外什么还在继续循环

程序要求:二维数组搜索,当找到我要的搜索码时终止 程序描述:我现在里面的FOR循坏放置了条件接线端,当找的我要的内容时...
发表于 12-23 19:56 252次 阅读
双重FOR循环终止,里面的终止了,外什么还在继续循环

LabVIEW程序输出数组的疑惑

目前要输出箭头所示的数组里的数据。该数组是一个3*3的二维数组,现在要检测六次,从而输出一个有6页的三维数组。现在的想法是在...
发表于 12-13 12:09 252次 阅读
LabVIEW程序输出数组的疑惑

如何利用这个中断子程序实现数组第一位是I?

我想实现一个功能就是从串口接收数据 然后放到table数组 接收的数据是以“I”开头的 “;”结束的 数据长度共38个字符 数组就是...
发表于 11-11 05:55 269次 阅读
如何利用这个中断子程序实现数组第一位是I?

如何做107的LWIP网络透传?

想请教以下LWIP, 我是用LWIP做网络透传 unsigned char net_in_rf_out_Buffer[128]={0}; unsigned char rf_in_net_o...
发表于 11-11 04:35 137次 阅读
如何做107的LWIP网络透传?

分布式存储方案的主要特点是什么?

接口与外设在一个视频监控系统中,选择什么样的存储解决方案直接决定了整个系统的系统架构以及系统的性能和稳定程度,目前视频监...
发表于 11-08 07:24 347次 阅读
分布式存储方案的主要特点是什么?

请问机器中十进制数257按字符形式存储表示多少?

十进制数257按字符形式存储时,机器中表示为多少? A)  323537H B)  020507H C)  0101H...
发表于 11-08 04:35 197次 阅读
请问机器中十进制数257按字符形式存储表示多少?

如何加快慢指针数学?

typedef struct{int32_t.[101];float value[101];}lut_key_vals;typedef struct{lut_key_vals.[3];float celsius[3];}._lut...
发表于 11-06 10:33 156次 阅读
如何加快慢指针数学?