【力扣】两数之和,暴力枚举 + 哈希表

两数之和原题地址

方法一:暴力枚举

首先,我们需要枚举数组中所有可能的下标对组合,对于 n 个数的数组,从中选两个下标,有 C_n^2 种可能。做法很简单,遍历数组中的所有元素,对于每一个元素,遍历该元素后面的所有元素即可

比如,对于 4 个元素的数组,下标是 0~3 ,所有可能的组合就是:(0,1),(0,2),(0,3),(1,2),(1,3),(2,3) ,总共有 C_4^2=6 种可能。

0 1 2 3
^ ^
^   ^
^     ^^ ^^   ^^ ^

// 方法一:暴力枚举
class Solution
{
public:vector<int> twoSum(vector<int>& nums, int target){// 暴力枚举for (int i = 0; i < nums.size() - 1; ++i){for (int j = i + 1; j < nums.size(); ++j){if (nums[i] + nums[j] == target){return { i,j };}}}return {};}
};

方法二:哈希表

暴力枚举的方法时间效率太低了,最坏的情况要把任意两个数都匹配一次。我们可以考虑把数组中的元素都存储到哈希表中,遍历数组中的元素,查找哈希表中是否有元素和数组中的元素匹配。

再具体一点,对于数组中的某一个元素,如果哈希表中有与之匹配的元素,就找到了符合题目要求的答案;如果没有元素与之匹配,就把这个元素存储在哈希表中。这样的话,对于数组中的每一个元素,只需要 O(1) 的时间复杂度就能匹配完,效率大大提升了。

C++ 中,需要使用 unordered_map ,而不是 unordered_set ,因为最终要返回的是数组的下标,所以要把数组的元素和对应的下标都存储到哈希表中。

// 方法二:哈希表
class Solution
{
public:vector<int> twoSum(vector<int>& nums, int target){unordered_map<int, int> um;for (int i = 0; i < nums.size(); ++i){// 哈希表中有元素与之匹配auto it = um.find(target - nums[i]);if (it != um.end()){return { i, it->second };}// 存入哈希表um[nums[i]] = i;}return {};}
};

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

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

相关文章

【Java EE】----SpringBoot的日志文件

1.SpringBoot使用日志 先得到日志对象通过日志对象提供的方法进行打印 2.打印日志的信息 3.日志级别 作用&#xff1a; 可以筛选出重要的信息不同环境实现不同日志级别的需求 ⽇志的级别分为&#xff1a;&#xff08;1-6级别从低到高&#xff09; trace&#xff1a;微量&#…

【QT+QGIS跨平台编译】之三十一:【FreeXL+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、FreeXL介绍二、文件下载三、文件分析四、pro文件五、编译实践一、FreeXL介绍 【FreeXL跨平台编译】:Windows环境下编译成果(支撑QGIS跨平台编译,以及二次研发) 【FreeXL跨平台编译】:Linux环境下编译成果(支撑QGIS跨平台编译,以及二次研发) 【FreeXL跨平台…

【JS逆向五】逆向模拟某网站的生成的【jsonKey】值 仅供学习

逆向日期&#xff1a;2024.02.07 使用工具&#xff1a;Node.js 加密方法&#xff1a;AES 文章全程已做去敏处理&#xff01;&#xff01;&#xff01; 【需要做的可联系我】 可使用AES进行解密处理&#xff08;直接解密即可&#xff09;&#xff1a;在线AES加解密工具 1、打开…

多路服务器技术如何处理大量并发请求?

在当今的互联网时代&#xff0c;随着用户数量的爆炸性增长和业务规模的扩大&#xff0c;多路服务器技术已成为处理大量并发请求的关键手段。多路服务器技术是一种并行处理技术&#xff0c;它可以通过多个服务器同时处理来自不同用户的请求&#xff0c;从而显著提高系统的整体性…

彩虹系统7.0免授权+精美WAP端模板源码

最低配置环境 PHP7.2 1、上传源码到网站根目录&#xff0c;导入数据库文件 2、修改数据库配置文件&#xff1a;/config.php 3、后台&#xff1a;/admin 账号&#xff1a; 4、前台用户&#xff1a;123456 密码&#xff1a;1234561

【lv5-7】

bootloader 在操作系统运行前的一小段代码&#xff0c;将软硬件环境初始化到一个合适的状态&#xff0c;为操作系统的加载和运行做好准备。 bootloader ->初始化软硬件环境 ->引导加载linux内核 ->给linux内核传参 ->执行用户命令 bootload是启动程序的总称&#x…

2 月 7 日算法练习- 数据结构-树状数组上二分

问题引入 给出三种操作&#xff0c; 0在容器中插入一个数。 1在容器中删除一个数。 2求出容器中大于a的第k大元素。 树状数组的特点就是对点更新&#xff0c;成段求和&#xff0c;而且常数非常小。原始的树状数组只有两种操作&#xff0c;在某点插入一个数和求1到i的所有数的…

合并分支rebase和merge的区别

文章目录 一、前言1.1、master分支1.2、dev分支 二、合并2.1、git merge2.2、git rebase 三、总结四、最后 一、前言 实际开发工作的时候&#xff0c;我们都是在自己的分支开发&#xff0c;然后将自己的分合并到主分支&#xff0c;那合并分支用2种操作&#xff0c;这2种操作有…

使用QT编写一个简单QQ登录界面

widget.cpp #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//设置窗口标题this->setWindowTitle("QQ");//设置窗口图标this->setWindowIcon(…

TCP的连接和断开详解

目录 1.TCP基础知识 1.1.TCP 头格式 1.2.TCP协议介绍 1.3.UDP协议介绍 1.4.TCP 和 UDP 区别 1.5.TCP 和 UDP 应用场景 1.6.计算机网络相关术语&#xff08;缩写&#xff09; 2.TCP 连接建立&#xff1a;三次握手 2.1.TCP 三次握手过程 2.2.三次握手原理 2.3.异常分析…

Python||数据分析与可视化_使用折线图分析各个城市的P.M.2.5月度差异情况(下)及使用堆叠柱状图对各个城市的PM2.5日均值情况进行数据分析与可视化

目录 1.使用Python折线图对各个城市的P.M.2.5月度差异情况进行数据分析与可视化。 2.使用Python堆叠柱状图对各个城市的PM2.5日均值情况进行数据分析与可视化。 1.使用Python折线图对各个城市的P.M.2.5月度差异情况进行数据分析与可视化。 import numpy as np import pandas a…

Python进程之并行与并发的区别

并行 : 当系统有一个以上CPU时&#xff0c;则进程的操作有可能非并发。当一个CPU执行一个进程时&#xff0c;另一个CPU可以执行另一个进程&#xff0c;两个进程互不抢占CPU资源&#xff0c;可以同时进行&#xff0c;这种方式我们称之为并行。 并发 : 当有多个进程在操作时&…

Optimism Collective 为 Covalent Network(CQT)提供价值 20 万美元的生态系统资助

Covalent Network&#xff08;CQT&#xff09; 是 Web3 生态系统中关键的“数据可用性”层&#xff0c;在与 Optimism Collective 多年的合作中取得了骄人的成果。Covalent Network&#xff08;CQT&#xff09;对于 Optimism 跨链数据的增长产生了直接的影响&#xff0c;而这一…

第三百一十五回

文章目录 1. 概念介绍2. 基本用法3. 补充用法4. 内容总结 我们在上一章回中介绍了"再谈ListView中的分隔线"&#xff0c;本章回中将介绍showMenu的用法.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在第一百六十三回中介绍了showMenu相关的内容…

一图窥探RAG技术发展现状

2023年除了大语言模型&#xff0c;听到最多的当属RAG&#xff08;检索增强生成技术了&#xff09;&#xff0c;在实际业务场景落地过程中&#xff0c;由于大模型目前的一定局限和能力现状以及Token限制、训练成本等多种因素的影响下&#xff0c;RAG不得不成为大家选择快速试错、…

学习前端的开始

什么是前端 Web前端&#xff0c;用来直接给用户呈现一个一个的网页一个软件通常情况下是由后端前端完成。 后端通常情况下通过Java,C这样一个编程语言来完成一个相关的逻辑处理&#xff0c;将数据返回给前端。 前端的工作把后端返回给自己的数据进行一系列拼装/组装之后&#…

6、5 门关于 AI 和 ChatGPT 的免费课程,带您从 0-100

5 门关于 AI 和 ChatGPT 的免费课程,带您从 0-100 想在 2024 年免费了解有关 AI 和 ChatGPT 的更多信息吗? 图片由 DALLE 3 提供 活着是多么美好的时光啊。还有什么比现在更适合了解生成式人工智能(尤其是 ChatGPT)等人工智能元素的呢!许多人对这个行业感兴趣,但有些…

RK3588平台开发系列讲解(AI 篇)什么是NPU

文章目录 一、什么是NPU二、什么是RKNPU沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇章主要讲解什么是NPU。 一、什么是NPU 📢什么是 NPU 呢? 在谈这个问题之前,可以先来看看什么是 CPU 和 GPU,CPU 就是中央处理器,中央处理器就好像是人类的大脑,主要负…

MySQL进阶45讲【15】“order by“是怎么工作的?

1 前言 在开发应用的时候&#xff0c;一定会经常碰到需要根据指定的字段排序来显示结果的需求。还是以我们前面举例用过的市民表为例&#xff0c;假设要查询城市是“杭州”的所有人名字&#xff0c;并且按照姓名排序返回前1000个人的姓名、年龄。 假设这个表的部分定义是这样…