当前位置: 首页 > news >正文

LeetCode热题100精讲——Top1:两数之和【哈希】

在这里插入图片描述

你好,我是安然无虞。

文章目录

    • 题目背景
    • 两数之和

在这里插入图片描述

题目背景

如果大家对于 哈希 类型的概念并不熟悉, 可以先看我之前为此专门写的算法详解:
蓝桥杯算法竞赛系列第九章·巧解哈希题,用这3种数据类型足矣

两数之和

题目链接:两数之和

在这里插入图片描述

解题思路:

对于一个元素 nums[i],想知道有没有另一个元素 nums[j] 的值为 target - nums[i],这很简单,我们用一个哈希表记录每个元素的值到索引的映射,这样就能快速判断数组中是否有一个值为 target - nums[i] 的元素了.

简单说,数组其实可以理解为一个「索引 -> 值」的哈希表映射,而我们又建立一个「值 -> 索引」的映射即可完成此题.

代码详解:

  • C++代码:
class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) 
    {
        // 建立值到索引的映射
        unordered_map<int, int> valToIndex;

        for(int i = 0; i < nums.size(); i++)
        {
            // 查哈希表,看是否有能和 nums[i] 凑出 target 的元素
            int need = target - nums[i];
            if(valToIndex.count(need))
            {
                return {i, valToIndex[need]};
            }

            // 存入val->index的映射
            valToIndex[nums[i]] = i;
        }    

        return {-1, -1};
    }
};
  • Python代码:
class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        # 建立值到索引的映射表
        valueToIndex = {}

        # 遍历列表
        for i in range(len(nums)):
            # 查哈希表, 看是否有能和nums[i]凑出target的元素
            need = target - nums[i]
            if need in valueToIndex:
                return [i, valueToIndex[need]]
                
            # 将need存入value->index的映射表
            valueToIndex[nums[i]] = i
        
        return [-1, -1]

Python代码也可以使用 enumerate() 方法在循环遍历列表的时候可以得到元素索引以及元素本身:

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        valToIndex = {}

        for index, val in enumerate(nums):
            need = target - val
            if need in valToIndex:
                return [index, valToIndex[need]]
            
            valToIndex[val] = index

        return [-1, -1]
        
遇见安然遇见你,不负代码不负卿。
谢谢老铁的时间,咱们下篇再见~

相关文章:

  • Redis GEO 命令详解:轻松实现“附近的人“功能
  • 数据结构之基本队列-顺序结构实现-初始化-判断队列是否为空(front=rear)-出队-入队-队尾满了,调整队列-获取队头元素
  • 基于C8051F020单片机的液晶显示,LCD1602并口驱动,单片机并口驱动LCD1602
  • 【嵌入式学习2】基础语法
  • ROM(只读存储器) 、SRAM(静态随机存储器) 和 Flash(闪存) 的详细解析
  • SpringCloud构建一个服务步骤
  • 在刀刃上发力:如何精准把握计划关键节点
  • 数据结构——串
  • Java 大视界 -- Java 大数据中的数据隐私保护技术在多方数据协作中的应用(147)
  • B树和 B+树
  • 如何实现单点登录?
  • 【js逆向入门】图灵爬虫练习平台 第九题
  • Linux进程控制(四)之进程程序替换
  • Spring Boot02(数据库、Redis)02---java八股
  • HTML网页代码预览器
  • 【Linux】Ubuntu 24.04 LTS 安装 Hadoop-3.4.1
  • TCP | 序列号和确认号 [逐包分析] | seq / ack 详解
  • 视频播放器(watermelon Player)vue2使用体验(教程版)
  • Android Compose 框架按钮与交互组件模块源码深度剖析(二)
  • windows清除电脑开机密码,可保留原本的系统和资料,不重装系统
  • 文昌市委原书记龙卫东已任海南省人社厅党组书记
  • 当哲学与戏剧作为一种生活方式——《人生六戏》分享会
  • 韩国首尔江南区一大型商场起火,消防部门正在灭火中
  • 美检察官向法庭提交通知,要求判处枪杀联合健康高管嫌疑人死刑
  • 期待会师!神二十与空间站完成对接
  • 神二十成功对接空间站