题目:1.两数之和

news/2024/7/24 12:13:39 标签: 算法, 数据结构, leetcode

题目

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

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

解题思路

本题目可以用遍历办法,思路很简单就不再演示了

其次采用哈希法里的map

本题其实有四个重点:

  • 为什么会想到用哈希表
  • 哈希表为什么用map
  • 本题map是用来存什么的
  • map中的key和value用来存什么的

为什么会想到用哈希表

再次强调当我们需要查询一个元素是否出现过,或者一个元素是否在集合里的时候,就要第一时间想到哈希法

哈希表为什么这里要用map

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

因为本地,我们不仅要知道元素有没有遍历过,还有知道这个元素对应的下标

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

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

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

本题map是用来存什么的

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

map中的key和value用来存什么的

{key:数据元素,value:数组元素对应的下标}

下面是代码实现

//采用map的hash法
#include <vector>
#include <unordered_map>
using namespace std;

class Solution 
{
public:
    vector<int> twoSum(vector<int>& nums, int target) 
    {
        unordered_map <int, int> map;
        for (int i = 0; i < nums.size(); i++)
        {
            auto tmp = map.find(target - nums[i]);
            //map中找到了对应的值
            if (tmp != map.end())
            {
                return { tmp->second, i };
            }
            //没匹配到则加入map
            map.insert(pair<int, int>(nums[i], i));
        }

        return {};
    }
};


http://www.niftyadmin.cn/n/177454.html

相关文章

离线部署docker

1.2. 安装Docker (1) 上传docker-19.03.5.tar安装包到/app目录下 (2) 解压docker-19.03.5.tar到当前文件夹 tar -zxvf docker-19.03.5.tar (3) 将docker目录下所有文件复制到/usr/bin目录下 cp docker/* /usr/bin/ (4) 配置docker的systemctl指令 将如下内容写入到/etc/s…

langchain 正式学习1

langchain 正式学习1 langchain的pypi&#xff1a; https://pypi.org/project/langchain/ 让New Bing 给我推荐些博客和笔记 好的&#xff0c;我为你找到了一些LangChain的学习笔记&#xff0c;你可以参考以下的链接&#xff1a; LangChain: Introduction and Getting Started…

达梦数据库 linux安装

检查 Linux(Unix)系统信息 如果用户的 DM 软件安装包是经过数字签名的&#xff0c;请按官网进行相关操作。此处忽略。 获取系统位数 getconf LONG_BIT 查询操作系统release信息 lsb_release -a 查询系统信息 cat /etc/issue 查询系统名称 uname -a 之所以要先检查系统信息&…

数据结构绪论(2)

目录 1.3抽象数据类型的表示与实现 一、数据类型 二、抽象数据类型&#xff08;ADTs:Abstract Data Types&#xff09; ADT常用定义格式&#xff1a; ​编辑 抽象数据类型的表示与实现 抽象数据类型的定义 抽象数据类型的表示 抽象数据类型的实现 抽象数据类型的表示与实…

11.Java之抽象类

1. 抽象类1.1 抽象类概念在面向对象的概念中&#xff0c;所有的对象都是通过类来描绘的&#xff0c;但是反过来&#xff0c;并不是所有的类都是用来描绘对象的&#xff0c;如果一个类中没有包含足够的信息来描绘一个具体的对象&#xff0c;这样的类就是抽象类。 比如&#xff1…

Python科学计算包MNE——头模型和前向计算

目录前言一. Freesurfer安装及配置1.1 Freesurfer下载安装1.2 Freesurfer功能测试二. 计算和可视化BEM表面三. 可视化配准四. 计算源空间五. 计算正向解前言 mne是一款用于处理神经信号的Python 科学计算包&#xff0c;其中所有的示例数据集都是来自同一个机构中来自 60 通道电…

解忧杂货铺(五续集):用了无法离开的网站资源

1、青柠起始页 青柠起始页https://limestart.cn/intro 2、问答库-考公/考研专属 问答库https://www.asklib.com/kuaiji/chuji.html 3、简历制作 简历制作https://www.polebrief.com/index 4、免费下载歌曲网站 免费下载歌曲https://tools.liumingye.cn/music/?pagesearch…

CentOS 7 安装 mysql 8.0 客户端

只想安装 mysql-client 8.0 &#xff0c; 结果发现直接 yum install mysql mysql-client 安装的版本是 mysql Ver 15.1 Distrib 5.5.68-MariaDB 官方文档 2.2 Installing MySQL Shell on Linux 原来他不叫 mysql-client &#xff0c;而是 MySQL Shell 之前不知道的时候&…