题目背景

这个题目用常规的双循环就可以完成。

但不是最优解。为什么?

看看他的步骤数:

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表实践 —— 两数之和的更多相关文章

  1. 【数据结构】Hash表简介及leetcode两数之和python实现

    文章目录 Hash表简介 基本思想 建立步骤 问题 Hash表实现 Hash函数构造 冲突处理方法 leetcode两数之和python实现 题目描述 基于Hash思想的实现 Hash表简介 基本思想 ...

  2. C++ undered_map哈希表用法——leetcode两数之和

    undered_map 头文件:#include<undered_map> 创建表undered_map<key,value> Map_name; 插入元素 a[key]=va ...

  3. 167. 两数之和 II - 输入有序数组 + 哈希表 + 双指针

    167. 两数之和 II - 输入有序数组 LeetCode_167 题目描述 方法一:暴力法(使用哈希表) class Solution { public int[] twoSum(int[] nu ...

  4. LintCode-56.两数之和

    两数之和 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target. 你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标.注意这里下标的范围是 1 到 n, ...

  5. Leetcode 001. 两数之和(扩展)

    1.题目要求 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 2.解法一:暴力法(for*for,O(n*n)) ...

  6. Leetcode(1)两数之和

    Leetcode(1)两数之和 [题目表述]: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标.你可以假设每种输入只会对应一 ...

  7. LeetCode题解001:两数之和

    两数之和 题目 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个 ...

  8. LeetCode_#1_两数之和 Two Sum_C++题解

    1. 两数之和 Two Sum 题目描述 Given an array of integers, return indices of the two numbers such that they ad ...

  9. 【Leetcode】【简单】【1. 两数之和】【JavaScript】

    题目描述 1. 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能 ...

  10. [Java]1.两数之和 - LeetCode

    1 题目 2 思路与代码 思路一:暴力法(两层For循环) 时间复杂度:O(n^2) 对于每个元素,我们试图通过遍历数组的其余部分来寻找它所对应的目标元素,这将耗费 O(n) 的时间.因此时间复杂度为 ...

随机推荐

  1. 作业错题集锦(pta英文数据结构)

    A graph with 30 vertices and 40 edges must have at most twenty one connected component(s). 要计算最大连通分量 ...

  2. 某手创作服务 __NS_sig3 sig3 | js 逆向

    拿获取作品列表为例 https://cp.kuaishou.com/rest/cp/works/v2/video/pc/photo/list?__NS_sig3=xxxxxxxxxxx 搜索__NS_ ...

  3. 解决php提示Maximum execution time of 30 seconds exceeded错误

    如何解决错误? 基本上,有3种方法可以处理此错误: 修改php配置文件php.ini文件 使用 ini_set() 函数 使用set_time_limit()函数 1)修改php配置文件php.ini ...

  4. oeasy教您玩转vim - 30 - # 屏位行号

    ​ 屏位行号 回忆上节课内容 上次我们主要讲的翻页 :set scrolloff=2 控制上下留天留地 上下翻页(这个最常用) ctrl + f 向下一屏 ctrl + b 向上一屏 上下移屏一行 c ...

  5. 题解:AT_abc357_f [ABC357F] Two Sequence Queries

    题意 维护一个数据结构,支持两个数列的区间求和,和查询区间内两数列各元素积的和. 分析 线段树万岁! 这道题要维护两个序列,所以线段树中要同时存储两个区间和.但还要在维护一个信息,是该区间内两序列元素 ...

  6. Python 正则表达式实战之Java日志解析

    需求描述 基于生产监控告警需求,需要对Java日志进行解析,提取相关信息,作为告警通知消息的内容部分. 提取思路 具体怎么提取,提取哪些内容呢?这里笔者分析了大量不同形态的生产日志,最后总结出4种形态 ...

  7. 巧用 QLineF 从 QTransform 提取角度

    我们在对 QGraphicsItem 进行变换时,QT 提供了很多便捷的方法.但当我们想获取当前变换的角度时却有些困难,因为 QTransform 没有提供获取角度的方法.在文章Qt 从 QTrans ...

  8. 如何理解IOC中的“反转”和DI中的“注入”

    在理解 IOC 中的"反转"和 DI 中的"注入"之前,首先要理解原本的控制流程. 在传统的应用程序中,对象之间的依赖关系通常由调用方(例如客户端或者上层模块) ...

  9. RPA美团外卖商家中心批量发送消息

    美团外卖商家中心批量发送消息,首先我们需要确定给谁发,发送什么内容 给谁发:可以传入美团用户名.美团订单号.美团将通过此条件进行搜索进入会话框 发送什么内容:批量发送信息给不同的用户,比如给不同的订单 ...

  10. SpringBoot 配置统一API对象返回

    1.前言 在实际项目开发中,为了便于前端进行响应处理,需要统一返回类格式.特别是在有多个后端开发人员参与的情况下,如果不规范返回类,每个人按照个人习惯返回数据,前端将面临各式各样的返回数据,难以统一处 ...