哈希专题 - leetcode 1. 两数之和 - 简单难度

news2025/1/18 8:42:43

leetcode 1. 两数之和

  • leetcode 1. 两数之和 简单难度 哈希
    • 1. 题目详情
      • 1. 原题链接
      • 2. 基础框架
    • 2. 解题思路
      • 1. 题目分析
      • 2. 算法原理
      • 3. 时间复杂度
    • 3. 代码实现
    • 4. 知识与收获

在这里插入图片描述

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) 的算法吗?

1. 原题链接

leetcode 1. 两数之和

2. 基础框架

● Cpp代码框架

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        
    }
};

2. 解题思路

1. 题目分析

( 1 ) (1) (1) 在数组nums中找到和为target的两个数,并以数组的形式返回其下标。
( 2 ) (2) (2)

2. 算法原理

( 1 ) (1) (1) 首先先到暴力解法,双重for循环外层循环确定一个数nums[i],内层循环从[i+1, n-1]依次确定每一个nums[j],判断nums[i] + nums[j]是否与target相等。等价于找target - nums[j]并判断是否与外层的nums[i]相等。时间复杂度是 O ( n 2 ) O(n^2) O(n2)。如何优化呢?
( 2 ) (2) (2) 暴力算法中,我们内层循环都花在了找target - nums[i]上了,如果把target - nums[i]放入哈希表中,我们 O ( 1 ) O(1) O(1)时间复杂度就可以确定是否找到了target - nums[i]了,即不需要内层循环了。
( 3 ) (3) (3) 对于nums[i],先在哈希表中查找target - nums[i]是否存在:
如果存在就返回对应下标;
如果不存在就把nums[i]放入哈希表中。
( 4 ) (4) (4) 不能先把nums[i]放入哈希表中,再查找target-nums[i],即需要排除自己找自己的情况。

3. 时间复杂度

O ( n ) O(n) O(n)

遍历一遍数组,对于每个元素nums[i],查找哈希表target-nums[i]。如果找到了就返回下标,找不到自身加入哈希表。

3. 代码实现

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int, int> hash;
        for(int i = 0;i < nums.size(); i++){
            // 对于nums[i],在哈希表中找到了target-nums[i]
            if(hash.find(target - nums[i]) != hash.end())
                return {i, hash[target - nums[i]]};
            // 对于nums[i],在哈希表中找不到target-nums[i],nums[i]插入哈希表
            hash[nums[i]] = i;
        }
        return {-1, -1};
    }
};

4. 知识与收获

( 1 ) (1) (1) 哈希可以实现 O ( 1 ) O(1) O(1)时间复杂度的查找,效率很高。


T h e The The E n d End End

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

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

相关文章

万马合一之js解答

输入m和n 两个数&#xff0c;m和n表示一个mn 的棋盘。输入棋盘内的数据。棋盘中存在数字和".“两种字符&#xff0c;如果是数字表示Q该位置是一匹马&#xff0c;如果是”."表示该位置为空的&#xff0c;棋盘内的数字表示为该马能走的最大步数。例如棋盘内某个位置一个…

ICCV 2023 超分辨率(Super-Resolution)论文汇总

文章目录 图像超分辨率&#xff08;Image Super-Resolution&#xff09; 1、经典图像超分辨率&#xff08;Classical image SR&#xff09; 2、基于参考的图像超分辨率&#xff08;Reference-Based image SR&#xff09; 3、高效&轻量化图像超分辨率&#xff08;Efficient/…

Unity引擎关于APP后台下载支持的实现问题

1&#xff09;Unity引擎关于APP后台下载支持的实现问题 2&#xff09;Prefab对DLL中脚本的引用丢失 3&#xff09;Unity DOTS资源加载问题 4&#xff09;UnitySendMessage和_MultiplyMatrixArrayWithBase4x4_NEON调用导致崩溃 这是第376篇UWA技术知识分享的推送&#xff0c;精选…

Unity背景模糊图片高斯模糊高性能的实现方案

环境&#xff1a; unity2021.3.x 效果&#xff1a; 模糊前&#xff1a; 模糊后&#xff1a; 模糊前&#xff1a; 模糊后&#xff1a; 实现核心思路(shader)&#xff1a; SubShader {CGINCLUDE#include "UnityCG.cginc"sampler2D _MainTex; // 主纹理half4 _MainTe…

CubeMX入门教程(1)——环境搭建

目录 1、为什么要用CubeMX&#xff1f; 2、如何安装CubeMX? 3、HAL固件库的安装 1、为什么要用CubeMX&#xff1f; STM32CubeMX 是 ST 意法半导体近几年来大力推荐的STM32 芯片图形化配置工具&#xff0c;目的就是为了方便开发者&#xff0c; 允许用户使用图形化向导生成C …

BUUCTF---[极客大挑战 2019]BabySQL1

1.这道题和之前做的几道题是相似的&#xff0c;这道题考的知识点更多。难度也比之前的大一些 2.尝试万能密码 or 1#发现过滤了or,使用1和1,发现他对单引号也进行了过滤。于是我尝试进行双写绕过&#xff0c;发现可以通过了。 3.由之前的做题经验可知&#xff0c;这道题会涉及到…

wps没保存关闭了怎么恢复数据?恢复文件教程

Microsoft Word是我们不可或缺的工具。很多小伙伴都遇到在WPS中编辑文件时&#xff0c;它可能会突然闪退&#xff0c;或者忘记及时保存文件就直接关闭了&#xff0c;导致我们辛苦编辑的文档丢失。面对这种情况我们该如何应对&#xff0c;尽量减小损失呢&#xff1f;接下来让我为…

Java - Spring MVC 实现跨域资源 CORS 请求

据我所知道的是有三种方式&#xff1a;Tomcat 配置、拦截器设置响应头和使用 Spring MVC 4.2。 设置 Tomcat 这种方式就是引用别人封装好的两个 jar 包&#xff0c;配置一下web.xml就行了。我也并不推荐&#xff0c;这里放两个我在网上找到的配置相关文章&#xff0c;感兴趣可…

遥感分析时什么情况下需要做大气校正?

经常会遇到这样的问题&#xff1a;什么情况需要做大气校正产生&#xff1f;这个问题取决于传感器和应用目标&#xff0c;总的来说&#xff0c;如果要做光谱分析&#xff0c;那么大气校正是必须要做的。本文对于在什么情况下选择什么样的大气校正方法&#xff0c;给出了一些依据…

(3)(3.3) MAVLink高延迟协议

文章目录 前言 1 配置 2 说明 3 消息说明 前言 ArduPilot 支持 MAVLink 高延迟协议(MAVLink High Latency)。该协议专为卫星或 LoRA 等低带宽或高成本链路而设计。 在此协议中&#xff0c;每 5s 只发送一次 HIGH_LATENCY2 MAVLink 信息。对 MAVLink 命令或请求&#xff08…

今日头条 _signature逆向分析

声明&#xff1a;本文仅作学习交流&#xff0c;请遵守法律法规&#xff0c;不要恶意爬取网站。 网址&#xff1a;aHR0cHM6Ly93d3cudG91dGlhby5jb20v 接口&#xff1a;aHR0cHM6Ly93d3cudG91dGlhby5jb20vaG90LWV2ZW50L2hvdC1ib2FyZC8 本文提到的接口是头条的今日热榜接口&…

linux安装ngnix

一、将nginx-1.20.1.tar.gz上传至linux服务器目录下 二、将nginx安装包解压到/usr/local目录下 tar -zxvf /home/local/nginx-1.20.1.tar.gz -C /usr/local/三、预先安装依赖 yum -y install pcre-devel yum -y install openssl openssl-devel yum -y install gcc gcc-c auto…

m4a是什么文件格式?音质是无损吗?

m4a文件格式作为一种音频文件格式&#xff0c;源于MPEG-4标准的制定&#xff0c;该标准致力于提供高效的多媒体编解码方案。通常使用AAC编码&#xff0c;可以提供高质量的音频&#xff0c;但不是无损格式。AAC是一种有损压缩格式&#xff0c;它能够在减小文件大小的同时保持相对…

使用paypal撸BLIZZARDENT 暴雪

在Fomepay平台可以使用493193的卡绑定PayPal来支付暴雪以及退款&#xff0c;有需要的小伙伴可以提取 点击进入Fomepay官方平台获取493193卡 只要对方退款&#xff0c;卡里面有钱我们就可以提取出来&#xff0c;当天处理 开卡步骤如下

laravel-admin 头部添加操作

新建html 样式及js namespace App\Admin\Extensions\Nav;class Links {public function __toString(){return <<<HTML<li><a href"" οnclick"js_method();return false;"><i class"fa fa-floppy-o"></i><s…

【C++】学习记录

一、第一个C程序 #include<iostream> using namespace std;int main() {cout << "Hello World!";return 0; } 二、数据类型、变量与常量、运算符 2.1 数据类型 2.2 变量与常量 2.3 运算符 三 、判断语句&#xff08;if-else、switch-case&#xff09; …

芯片财务管理ERP:主要功能与内容科普

随着科技的飞速发展&#xff0c;芯片产业作为现代信息技术的核心&#xff0c;对财务管理的要求也越来越高。为满足这一需求&#xff0c;芯片企业纷纷采用财务管理ERP(企业资源规划)系统&#xff0c;以提升财务管理效率和准确性。那么&#xff0c;芯片财务管理ERP究竟具备哪些主…

你不得不知道的Python AI库

Python是人工智能&#xff08;AI&#xff09;和机器学习&#xff08;ML&#xff09;领域中使用最广泛的编程语言之一&#xff0c;拥有丰富的库支持各种AI和ML任务。本文介绍一些经典的Python AI库。 1. NumPy 简介&#xff1a;NumPy&#xff08;Numerical Python&#xff09;…

python词嵌入

一、词嵌入的概念 自然语言处理的突破在2023年震撼世界&#xff0c;chatgpt3出来&#xff0c;之后chatgpt4、Gemini、Claude3等出来&#xff0c;问答越来越智能&#xff0c;非常厉害&#xff0c;其中有个基础性的概念&#xff0c;计算机要如何理解语言&#xff0c;基础工作就在…

.NET项目定时任务部署到IIS停止问题

项目场景&#xff1a; 在.Net开发中定时任务我一般都是写在Windows服务中跑&#xff0c;但这次项目组要求直接将定时任务写到web项目中。 问题描述 把定时任务的项目部署到IIS后&#xff0c;定时任务总是无缘无故挂掉。 原因分析&#xff1a; 最后发现是IIS应用程序池的回收…