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) 的时间.因此时间复杂度为 ...
随机推荐
- 使用SVG做模型贴图的思路
大多数情况下,三维模型使用PNG,JPG作为模型的贴图,当然为了性能优化,有时候也会使用压缩贴图来提高渲染效率和较少GPU压力. 今天提供一种新的思路,使用SVG作为模型的贴图,可以达到动态调整图片精 ...
- Figma 替代品 Excalidraw 安装和使用教程
如今远程办公盛行,一个好用的在线白板工具对于团队协作至关重要.然而,市面上的大多数白板应用要么功能单一,要么操作复杂,难以满足用户的多样化需求.尤其是在进行头脑风暴.流程设计或产品原型绘制时,我们常常 ...
- vue codemirro 文件对比 sql编辑器
效果图: 安装及引用同上一篇文章,请移步:https://www.cnblogs.com/Lu-Lu/p/16265815.html HTML: <el-dialog class="d ...
- java开发,入职第一天都干什么,带提前了解
2024.7.24,帝都今晚大雨,在雨声磅礴的夜晚适合干什么,没错适合敲代码,写博客,今晚来聊下入职一个新公司,第一天都干什么. 无论是刚毕业的新手小白,还是工作十余年的职场老人,入职一家新公司,只要 ...
- 5、SpringMVC之域对象共享数据
5.1.域对象简介 请求域(request):一次请求范围内有效 会话域(session):一次会话范围内有效 应用域(application):整个应用范围内有效 5.2.环境搭建 5.2.1.右击 ...
- 【Windows】搭建FTP服务器
1.开启FTP服务和IIS服务 2.设置IIS服务 添加FTP站点[右键] 设置站点名称和物理路径 绑定IP地址和FTP端口号 可以自定义虚拟主机名称 下面勾选[无SSL]即可 身份验证和授权设置 在 ...
- HPA* (Near Optimal hierarchical Path-finding)算法的效果图
本文中的图全部来自: https://mohitsharma0690.blogspot.com/2016/01/hierarchical-pathfinding.html 图的说明: Here is ...
- 树莓派3b+ 安装Ubuntu mate18.04系统 配置SSH 、 远程桌面realvnc
Ubuntu mate for 树莓派3b+ 系统下载: 下载地址: https://ubuntu-mate.org/download/ 这里用32位系统:(64位也可以的,虽然还是实验阶段的,不 ...
- 【转载】 python之理解super及MRO列表
原文地址: https://www.jianshu.com/p/de7d38c84443 ----------------------------------------------------- ...
- ubuntu 配置NTP时间服务器&&定时同步本地时间
Ubuntu系统: NTP时间服务器的安装: 服务器安装命令: sudo apt-get install ntp NTP服务配置,设置为本地时间服务器,屏蔽默认server,服务器层级设为10: vi ...