Hash表实践 —— 两数之和
题目背景

这个题目用常规的双循环就可以完成。
但不是最优解。为什么?
看看他的步骤数:
N =【3,2,4】
求结果为6的两个元素坐标如下,
1). 3+2 = 5 不等于
2). 3+4 = 7 不等于
3). 2+4 = 6 等于,获取坐标【1,2】
规律:
2个数 = 1 个步骤
3个数 = 3 个步骤
4个数 = 6 个步骤
5个数 = 10 个步骤
6个数 = 15 个步骤
7个数 = 21 个步骤
......
如果有N个元素, 则需要N个步骤,那么记作 O(N)。下面分析那么这个算法的大O是:

约等于 N(N) = $ N^2 $
这个算法的时间复杂度为:O($ N^2 $).
有什么办法能降低这个时间复杂度吗?
解题思路

def twoSum(nums, target):
# 创建一个哈希表来存储值和索引
num_to_index = {}
# 遍历数组
for i, num in enumerate(nums):
# 计算当前数字的补数
complement = target - num
# 检查补数是否在哈希表中
if complement in num_to_index:
# 如果在,返回补数的索引和当前索引
return [num_to_index[complement], i]
# 如果不在,将当前数字及其索引存入哈希表
num_to_index[num] = i
# 如果没有找到符合条件的两个数,返回空列表或抛出异常
return []
print(twoSum([3, 2, 4], 6))
模拟运行过程:
# {} 创建map
# 1) 6 - 3 = 3 , 判断 3不在map,继续
# map加上{3:1}
# 2) 6 - 2 = 4 , 判断 4不在map,继续
# map加上{3:1,2:2}
# 3) 6 - 4 = 2 , 判断 2在map ,返回当前4和2的坐标,结束。
# map{3:1,2:2}
Hash表实践 —— 两数之和的更多相关文章
- 【数据结构】Hash表简介及leetcode两数之和python实现
文章目录 Hash表简介 基本思想 建立步骤 问题 Hash表实现 Hash函数构造 冲突处理方法 leetcode两数之和python实现 题目描述 基于Hash思想的实现 Hash表简介 基本思想 ...
- C++ undered_map哈希表用法——leetcode两数之和
undered_map 头文件:#include<undered_map> 创建表undered_map<key,value> Map_name; 插入元素 a[key]=va ...
- 167. 两数之和 II - 输入有序数组 + 哈希表 + 双指针
167. 两数之和 II - 输入有序数组 LeetCode_167 题目描述 方法一:暴力法(使用哈希表) class Solution { public int[] twoSum(int[] nu ...
- LintCode-56.两数之和
两数之和 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target. 你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标.注意这里下标的范围是 1 到 n, ...
- Leetcode 001. 两数之和(扩展)
1.题目要求 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 2.解法一:暴力法(for*for,O(n*n)) ...
- Leetcode(1)两数之和
Leetcode(1)两数之和 [题目表述]: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标.你可以假设每种输入只会对应一 ...
- LeetCode题解001:两数之和
两数之和 题目 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个 ...
- LeetCode_#1_两数之和 Two Sum_C++题解
1. 两数之和 Two Sum 题目描述 Given an array of integers, return indices of the two numbers such that they ad ...
- 【Leetcode】【简单】【1. 两数之和】【JavaScript】
题目描述 1. 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能 ...
- [Java]1.两数之和 - LeetCode
1 题目 2 思路与代码 思路一:暴力法(两层For循环) 时间复杂度:O(n^2) 对于每个元素,我们试图通过遍历数组的其余部分来寻找它所对应的目标元素,这将耗费 O(n) 的时间.因此时间复杂度为 ...
随机推荐
- Libgdx游戏开发(7)——开始游戏界面实现
原文: Libgdx游戏开发(7)--开始游戏界面实现-Stars-One的杂货小窝 上篇文章也是讲解了如何实现暂停,但实际上,上篇的做法可能不够优雅 因为暂停和游戏界面我们可以分成2个Screen对 ...
- 新一代云原生日志架构 - Loggie的设计与实践
Loggie萌芽于网易严选业务的实际需求,成长于严选与数帆的长期共建,持续发展于网易数帆与网易传媒.中国工商银行的紧密协作.广泛的生态,使得项目能够基于业务需求不断完善.成熟.目前已经开源:https ...
- oeasy教您玩转python - 008 - # ascii码表
ASCII 码表 回忆上次内容 通过 help()可以从 python 命令行模式进入到帮助模式 通过 q 退出 ord(c)和 chr(i) 这是俩函数 这俩是一对,相反相成的 ord 通过字符 ...
- 在MySQL中 Truncate Delect Drop 的区别
在MySQL中 Truncate Delect Drop 的区别 面试问题: -- -- 请详细描述MySQL中TRUNCATE TABLE.DELETE FROM和DROP TABLE三个命令的区别 ...
- DUILib的代码分析
1.思路上用的是mfc的Message_MAP,而Control只是一个gdi render. 控件间使用的Message Map. 也就是说每个控件可以作为一个独立的个体
- 【RabbitMQ】01 简单模式
参考自腾讯云的实验课堂,减少部署时间的折腾 1.创建Erlang.Repo库 curl -s https://packagecloud.io/install/repositories/rabbitmq ...
- 【Windows】远程访问设置
Windows自带了远程访问功能: Win + R 打开运行,输入[mstsc] 连接需要提供主机地址,和用户账号 下面的选项可以保存此连接为文件,下一次连接直接打开文件即可访问 当然设置了以后可能还 ...
- Ubuntu/Linux系统中的multi-user.target
相关: https://www.cnblogs.com/devilmaycry812839668/p/17999041 multi-user.target 是 Linux 系统中 systemd 的一 ...
- AMiner的数据质量和完善问题
最近参加到了一个国家科技项目中,这里就不吐槽这种高校承接国家科技项目是一件多么不靠谱的事情了,这里就说说我们的对标产品"AMiner".补充一下,虽然个人对AMiner的评价不是很 ...
- manim边学边做--点
几何图形是manim中最重要的一类模块,manim内置了丰富的各类几何图形,本篇从最简单的点开始,逐个介绍manim中的几何模块. manim中点相关的模块主要有3个: Dot:通用的点 Labele ...