(哈希)两数之和(leetcode 1)

1.题目

给定一个整数数组 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]

提示:

2 <= nums.length <= 104
-109 <= nums[i] <= 109
-109 <= target <= 109
只会存在一个有效答案
进阶:你可以想出一个时间复杂度小于 O(n2) 的算法吗?

2.分析与解答

2.1基础知识

map是STL的一个关联容器。

map<string,int> cnt;//前键后值,键就可以理解为索引,每个索引只能在map中出现一次

map中修改数据:
int i = my_Map[“a”];
my_Map[“a”] = i;//索引a对应的值是i

map中的count()函数: 返回索引出现的次数,由于map中索引只出现一次,所以返回只会是0或1.

a[i],其实提供了一个i到a[i]的映射

map中的count()函数,能够判断键是否出现过,同时map中的键和值也能够拥有其原本的意义。

但是用数组就有了局限性,因为如果把a[i]当成一个i到a[i]的映射,那么无法判断a[i]是否出现过。所以说一个数组作为映射的话比map作为映射表示的内涵要少。

2.2思路

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

也就是说,在数组里有两个数a和target-a,需要输出他们的下标。

解决的思路:

  1. 通过map建立一个数和下标的映射。
  2. 然后扫描数组,判断数nums[i]所对应的target-nums[i]是否在map中。
  3. 如果找到,那么读出键对应的值也就是数的下标。
  4. 如果没找到,把这个数和它的下标存在map里。

2.3代码(c++)

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {map<int,int> a;//提供一对一的hashvector<int> b(2,-1);//用来承载结果,初始化一个大小为2,值为-1的容器bfor(int i=0;i<nums.size();i++){if(a.count(target-nums[i])>0)//如果找到一个数是target-nums[i]{b[1]=i;b[0]=a[target-nums[i]];//读出它对应的下标break;}a[nums[i]]=i;//把这个数和它的下标存在map里}return b;};
};

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

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

相关文章

丢失的数字

给定一个包含 [0, n] 中 n 个数的数组 nums &#xff0c;找出 [0, n] 这个范围内没有出现在数组中的那个数。 示例 1&#xff1a; 输入&#xff1a;nums [3,0,1] 输出&#xff1a;2 解释&#xff1a;n 3&#xff0c;因为有 3 个数字&#xff0c;所以所有的数字都在范围 [0,3…

ftp服务器收集文件,ftp服务器收集文件

ftp服务器收集文件 内容精选换一换为了对源端服务器进行迁移可行性评估以及为后续目的端服务器的选择和配置提供必要性数据&#xff0c;迁移Agent会收集源端服务器的相关信息并上报到主机迁移服务。收集的Windows操作系统的具体数据如表1所示。收集的Linux操作系统的具体数据如…

STM32-GPIO学习-跑马灯实验和按键实验-寄存器版本和HAL库版本

一、stm32跑马灯实验 a.GPIO general purpose input output 通用输入输出端口&#xff0c;可以做输入也可做输出&#xff0c;GPIO端口可通过程序配置成输入或输出。 STM32FXXXIGT6一共9组IO&#xff1a;PA~ PI&#xff0c;其中PA~ PH每组16个IO&#xff0c;PI只有PI0~PI11。…

STM32-时钟-时钟树-时钟初始化配置

1.STM32时钟 STM32有5个时钟源&#xff1a;HSI、HSE、LSI、LSE、PLL HSI是高速内部时钟&#xff0c;RC振荡器&#xff0c;频率为16MHz&#xff0c;精度不高。可以直接作为系统时钟或者用作PLL时钟输入。 HSE是高速外部时钟&#xff0c;可接石英/陶瓷谐振器&#xff0c;或者接…

pe系统 服务器维护,FirPE 维护系统

前言年更项目更新啦~~~&#xff0c;这次修复了一些BUG&#xff0c;此外还增加了亿点特性。首次使用WinRE注册表&#xff0c;使得WinPE速度更快了。系统简介FirPE 是一款系统预安装环境(Windows PE)&#xff0c;它具有简约、易操作等特点&#xff0c;使用起来十分人性化。以U盘作…

STM32-Systick滴答定时器-延时函数

1.STM32-Systick滴答定时器 Systick定时器&#xff0c;是一个简单的定时器&#xff0c;对于ST的CM3,CM4,CM7内核芯片&#xff0c;都有Systick定时器。 Systick定时器常用来做延时&#xff0c;或者实时系统的心跳时钟。这样可以节省MCU资源&#xff0c;不用浪费一个定时器。比如…

华为服务器更改从系统盘启动不了,华为服务器设置启动项

华为服务器设置启动项 内容精选换一换对于已安装Cloud-Init/Cloudbase-Init的云服务器&#xff0c;首次执行切换/故障切换操作&#xff0c;或者创建容灾演练后&#xff0c;系统第一次启动时会运行Cloud-Init/Cloudbase-Init&#xff0c;为云服务器重新注入初始化数据&#xff0…

STM32-NVIC中断优先级分组-中断优先级设置

STM32-中断优先级管理NVIC 1.NVIC中断优先级分组 NVIC的全称是Nested vectoredinterrupt controller&#xff0c;即嵌套向量中断控制器。STM32F中文参考手册中搜索向量表可以找到相应的中断说明。 CM4/CM7 内核支持256个中断&#xff0c;其中包含了16个内核中断和240个外部中…

hyper-v虚拟服务器内存满了,在Hyper-V Dynamic Memory里设置虚拟内存

Hyper-V R2 SP1版中加入了动态内存技术&#xff0c;关于内存分配的猜想也随之结束。当VMware可以自动进行虚拟内存分配的时候&#xff0c;Hyper-V通过动态内存让用户可以调整虚拟内存的设置。这种灵活性为主机内存分配方式提供了参考&#xff0c;有效提高了精确度和降低难度。通…

STM32-IO引脚复用-原理和使用

1.什么是端口复用&#xff1f; STM32有很多的内置外设(把一些功能ADC\看门狗…集中到芯片里面)&#xff0c;这些外设的外部引脚都是与GPIO复用的。也就是说&#xff0c;一个GPIO如果可以复用为内置外设的功能引脚&#xff0c;那么当这个GPIO作为内置外设使用的时候&#xff0c…

泰拉瑞亚服务器config修改,泰拉瑞亚配置怎么修改_泰拉瑞亚配置修改方法介绍...

泰拉瑞亚配置怎么修改呢&#xff0c;还有很多玩家还不知道的&#xff0c;下面小编为玩家们带来了泰拉瑞亚配置修改方法介绍&#xff0c;一起来看看吧。泰拉瑞亚配置修改方法介绍Config文件(1)Wiki链接http://terraria.gamepedia.com/Config.json_settings(2)关于Configconfig文…

STM32-UART-串口通信框图-波特率计算

1.处理器与外部设备通信的两种方式&#xff1a; 并行通信 传输原理&#xff1a;数据各个位同时传输。优点&#xff1a;速度快缺点&#xff1a;占用引脚资源多 串行通信 传输原理&#xff1a;数据按位顺序传输。优点&#xff1a;占用引脚资源少缺点&#xff1a;速度相对较慢…

java客户端与服务器信息加密,Java AES加密 - 在客户端和服务器之间发送初始化向量...

我在客户端生成初始化向量&#xff0c;其中消息被加密&#xff0c;然后与解密向量一起发送到服务器。Java AES加密 - 在客户端和服务器之间发送初始化向量客户端代码&#xff1a;String key1 "1234567812345678";byte[] key2 key1.getBytes();SecretKeySpec secret…

STM32-串口发送数据-过程与配置

串口发送过程配置流程 HAL库中串口寄存器定义文件&#xff1a; stm32f429xx.h F429芯片 stm32f767xx.h F767芯片 stm32f103xx.h F103芯片 stm32fnnnx.x.h 其他芯片 可以在其中找到USART_TypeDef&#xff1a;最终会映射到寄存器的地址。 typedef struct {__IO uint32_t CR1;…

STM32 串口接收流程-串口接收中断

串口接收 串口接收流程 编程USARTx_CR1的M位来定义字长。编程USARTx_CR2的STOP位来定义停止位位数。编程USARTx_BRR寄存器确定波特率。使能USARTx_CR1的UE位使能USARTx。如果进行多缓冲通信&#xff0c;配置USARTx_CR3的DMA使能&#xff08;DMAT)。使能USARTx_CR1的RE位为1使…

STM32-串口接收、发送数据实验-程序代码分析

串口通信实验 Printf支持 printf向串口发送一些字符串数据。如果使用串口2&#xff0c;可以修改while((USART1->SR&0X40)0);和USART1->DR (u8) ch; 中的USART1为USART2. //加入以下代码,支持printf函数,而不需要选择use MicroLIB #if 1 #pragma import(__use_…

STM32-外部中断配置-外部中断实验

STM32-外部中断原理与配置 IO口外部中断原理概述 STM32控制器支持的外部中断/事件请求 中断线M3M4M7EXTI线0~15:对应外部IO口的输入中断。√√√EXTI线16&#xff1a;连接到PVD输出。√√√EXTI线17&#xff1a;连接到RTC闹钟事件。√√√EXTI线18&#xff1a;连接到USB OTG…

STM32-独立看门狗原理-实验

独立看门狗原理概述 为什么要看门狗&#xff1a; 在由单片机构成的微型计算机系统中&#xff0c;由于单片机的工作常常会受到来自外界电磁场的干扰&#xff0c;造成程序的跑飞&#xff0c;而陷入死循环&#xff0c;程序的正常运行被打断&#xff0c;由单片机控制的系统无法继…

STM32-窗口看门狗-工作过程-配置-实验

窗口看门狗 窗口看门狗概述 之所以称为窗口就是因为其喂狗时间是一个有上下限的范围内(窗口&#xff09;&#xff0c;你可以通过设定相关寄存器&#xff0c;设定其上限时间&#xff08;下限固定&#xff09;。喂狗的时间不能过早也不能过晚。 而独立看门狗限制喂狗时间在0-x内…

python 列表、元组、集合、字典、循环遍历数据结构

python 列表、元组、集合、字典、数据结构的循环&#xff08;整理自python文档&#xff09;列表-list-用方括号标注&#xff0c;逗号分隔的一组值list 的 方法对list添加、插入、删除、查找、排列、翻转list.append(x)list.extend(iterable)list.insert(i, x)list.remove(x)lis…