两数之和(力扣刷题)

        给定一个整数数组 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
只会存在一个有效答案

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/two-sum

        我就需要一个集合来存放我们遍历过的元素,然后在遍历数组的时候去询问这个集合,某元素是否遍历过,也就是 是否出现在这个集合。

        那么我们就应该想到使用哈希法了。

        因为本地,我们不仅要知道元素有没有遍历过,还有知道这个元素对应的下标,需要使用 key value结构来存放,key来存元素,value来存下标,那么使用map正合适

        再来看一下使用数组和set来做哈希法的局限。

  • 数组的大小是受限制的,而且如果元素很少,而哈希值太大会造成内存空间的浪费。
  • set是一个集合,里面放的元素只能是一个key,而两数之和这道题目,不仅要判断y是否存在而且还要记录y的下标位置,因为要返回x 和 y的下标。所以set 也不能用。

        此时就要选择另一种数据结构:map ,map是一种key value的存储结构,可以用key保存数值,用value在保存数值所在的下标。

C++中map,有三种类型:

 

        std::unordered_map 底层实现为哈希表,std::map 和std::multimap 的底层实现是红黑树。

        同理,std::map 和std::multimap 的key也是有序的(这个问题也经常作为面试题,考察对语言容器底层的理解)。 更多哈希表的理论知识请看关于哈希表,你该了解这些! (opens new window)。

        这道题目中并不需要key有序,选择std::unordered_map 效率更高! 使用其他语言的录友注意了解一下自己所用语言的数据结构就行。

接下来需要明确两点:

  • map用来做什么
  • map中key和value分别表示什么

        map目的用来存放我们访问过的元素,因为遍历数组的时候,需要记录我们之前遍历过哪些元素和对应的下标,这样才能找到与当前元素相匹配的(也就是相加等于target)

接下来是map中key和value分别表示什么。

这道题 我们需要 给出一个元素,判断这个元素是否出现过,如果出现过,返回这个元素的下标。

那么判断元素是否出现,这个元素就要作为key,所以数组中的元素作为key,有key对应的就是value,value用来存下标。

所以 map中的存储结构为 {key:数据元素,value:数组元素对应的下标}。

在遍历数组的时候,只需要向map去查询是否有和目前遍历元素匹配的数值,如果有,就找到的匹配对,如果没有,就把目前遍历的元素放进map中,因为map存放的就是我们访问过的元素。

 代码如下:

class Solution 
{
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        std::unordered_map<int,int> map;
        
        for(int i = 0; i < nums.size(); i++)
        {
            auto iter = map.find(target - nums[i]); //自动变量
            if(iter != map.end())
            {
                return {iter->second,i};
            }

            map.insert(pair<int,int>(nums[i],i));
        }

        return {};      
}
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker安装Redis集群(主从复制)

Docker安装Redis集群(主从复制) 部署Redis集群 配置阿里云镜像 sudo vim /etc/docker/daemon.json插入如下镜像 {"registry-mirrors": ["https://sdiz8d27.mirror.aliyuncs.com"] }重启docker sudo systemctl daemon-reloadsudo systemctl restart do…

如何利用ChatGPT自动生成SQL语句

作为一名开发者&#xff0c;你可能已经使用过自然语言处理&#xff08;NLP&#xff09;及其可能彻底改变我们与技术互动的方式。由OpenAI提供支持的文本到SQL工具是一种强大的方法&#xff0c;可以从自然语言文本中生成SQL语句。在本博客文章中&#xff0c;我们将探讨七个创造性…

物流云数据分析平台

物流云数据分析服务平台 http://project.webcats.cn/bx/36569/2455/index.html 本次系统模拟的是湖南省数据&#xff0c;解释权归杭氏集团所有&#xff01; 1、系统简介: 物流大数据集成展示系统旨在通过大屏幕全面显示指定地区的物流运营车辆、物流公司和货主的相关信息和…

java版工程项目管理系统 Spring Cloud+Spring Boot+Mybatis+Vue+ElementUI+前后端分离 功能清单

ava版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下&#xff1a; 首页 工作台&#xff1a;待办工作、消息通知、预警信息&#xff0c;点击可进入相应的列表 项目进度图表&#xff1a;选择&#xff08;总体或单个&#xff09;项目显示1…

自由传奇|为你的队伍加油!

一个关于运动生活方式和如何将运动实践提升到新高度的独家 NFT 作品集。为你的队伍欢呼&#xff0c;认识传奇人物&#xff0c;以及每个球队的庆祝方式。 NFT 是自由传说游戏体验的一部分&#xff0c;在 The Sandbox 上独家推出。 该系列将于已在 The Sandbox 市场平台上线。 NF…

Mysql-索引-数据结构

Mysql索引-B树/B树 tip 索引好处初体验&#xff1a; select count(*) from ydl_user; -- 5.429 select * from ydl_user where user_id 1000000; -- 0.355s select * from ydl_user where user_name Jennifer Susan Johnson; -- 4.715s一方面mysql的数据是存储在磁盘上的&…

javaEE简单示例——基于注解的事务管理

简单介绍&#xff1a; 在之前&#xff0c;我们介绍了基于XML配置文件的配置方式&#xff0c;这种方式对于程序员来说还是比较繁琐了&#xff0c;我们这次来介绍一个更简单的方式来配置事务管理&#xff0c;那就是基于注解的事务管理。 接下来我们来开始介绍基于注解的事务管理…

轻松拿下年薪35W+Offer!这15个高频开发面试问题必须掌握!

作为SaaS行业的先驱&#xff0c;Salesforce的发展一路高歌猛进。Salesforce开发人员不仅能学习到最新的技术&#xff0c;而且比其他行业的同岗位享有更高的薪水&#xff0c;这也驱使了越来越多人加入Salesforce大军。 通过自由侠部落目前发布的岗位机会来看&#xff0c;即使在二…

企业邮箱的定义和要求

在讨论哪个企业邮箱最好使用之前&#xff0c;我们先明确一下企业邮箱的定义和要求&#xff1f; 以下是安全性、管理权限、员工体验、服务品质四个方面的总结&#xff0c;希望对您的选择有所帮助&#xff1a; 1.安全性 安全第一&#xff0c;这是不变的真理&#xff01;当企业使…

vue-antd-admin——实现全网站选项的切换并实现页面的刷新——技能提升

今天写后台管理系统时&#xff0c;遇到一个需求&#xff0c;是关于内外贸选项的切换。 效果图如下&#xff1a; 默认是内贸选项&#xff0c;当进行切换时&#xff0c;无论是在哪个页面&#xff0c;当前页面都要进行刷新&#xff0c;并将选项的参数传递到接口中。 下面详细介…

iOS私有pod库的gitignore文件

我们在进行pod 死有库开发的时候&#xff0c;如果使用默认生成的gitignore 文件&#xff0c;每次提交和拉代码都会有大量的冲突&#xff0c;会严重干扰我们正常的开发&#xff0c;所以有必要进行设置一些忽略文件 通常pods 文件夹中的文件是要忽略的&#xff0c;还会有podfile…

聊一聊前端的性能指标

一、前端性能指标有哪些&#xff1f; 根据 chrome Lighthouse 最新规则&#xff0c;前端性能指标考量主要有 FCP&#xff08;First Contenful Paint&#xff09;、SI&#xff08;Speed Index&#xff09;、LCP&#xff08;Largest Contentful Paint&#xff09;、TBT&#xff…

CSS transition 小技巧!如何保留 hover 的状态

前言 通常情况下&#xff0c;hover 是无法保存状态的。鼠标移入触发额外样式&#xff0c;一旦移出就还原了 el:hover{color: red }这就意味着&#xff0c;如果需要保留 hover 的状态&#xff0c;可能就不得不借助 JS 了&#xff0c;比如下面是某某书院的首页排行榜效果。 这…

图解redis的AOF持久化

目录 1.引言 2.AOF持久化的实现 2.1命令追加 2.2AOF文件的写入 3.AOF的文件载入和数据还原 4.AOF重写 4.1AOF重写实现 4.2AOF后台重写&#xff08;BGREWRITEAOF&#xff09; 1.引言 redis是一个内存数据库&#xff0c;如果需要保存在磁盘那么就是需要持久化&#xff08…

thinkphp+vue水果购物商城网站

需要解决的主要问题&#xff1a; 1、网页编程环境和工具。 2、后台数据库的管理。 3、网站的基本功能建设。 4、对比实际应用中的购物网站的功能和运作流程&#xff0c;完善程序功能。 水果购物商城系统的主要使用者分为管理员&#xff1b;个人中心、用户管理、水果分类管理…

二维前缀和求子矩阵

二维前缀和求子矩阵 如何计算前缀和矩阵&#xff1a; - 如何利用前缀和矩阵&#xff0c;计算某一个子矩阵的和&#xff1a; 如求&#xff1a;[x1y1,x2,y2]子矩阵的和&#xff0c;Sx2,y2-Sx2,y-1-Sx1-1,y2Sx1-1,y1-1 例题及代码模板&#xff1a; 子矩阵的和 输入一个n行m列的…

VSQT 联编无转到槽选项--VS2019中使用QT建立信号和槽函数连接

问题 如题所述 解决方法 自己动手丰衣足食 //xxx.h signals:xxx private slots:xxx //xxx.cpp半自动化 用惯了转到槽函数肯定对此难以适应&#xff0c;觉得特别麻烦。其实我们有相对简洁的方法。 仅需要规范命名即可&#xff01; 例如&#xff0c;我需要添加一个 pushButton…

Pytorch线性模型实现——up主:刘二大人《PyTorch深度学习实践》

教程&#xff1a; https://www.bilibili.com/video/BV1Y7411d7Ys?p2&vd_source715b347a0d6cb8aa3822e5a102f366fe 数据集&#xff1a; xdata[1.0,2.0,3.0]ydata[2.0,4.0,6.0]x_{data} [1.0, 2.0, 3.0] \\y_{data} [2.0, 4.0, 6.0]xdata​[1.0,2.0,3.0]ydata​[2.0,4.0,6…

Spring —— Spring简单的读取和存储对象Ⅰ

JavaEE传送门JavaEE Spring —— 初学 Spring, 理解控制反转 Spring —— Spring 的创建与使用 目录Spring 简单的读取和存储对象存储 Bean 对象配置扫描路径添加注解存储 Bean 对象Controller (控制器存储)Service&#xff08;服务存储&#xff09;Repository&#xff08;仓…

Python中 join() 函数的使用方法

人生苦短&#xff0c;我用python 函数&#xff1a;string.join() Python中有join()和os.path.join()两个函数&#xff0c;具体作用如下&#xff1a; join()&#xff1a;连接字符串数组。将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串 os.path.joi…
最新文章