【C++】1 两数之和

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

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

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

又见 twoSum,是否又进步了些?

#include <unordered_map> // 包含哈希表库
#include <vector>
#include <iostream>

using namespace std;

vector<int> twoSum(const vector<int>& nums, int target) {
    unordered_map<int, int> numMap; // 创建哈希表来存储数值及其索引

    // 遍历数组
    for (int i = 0; i < nums.size(); ++i) {
        int complement = target - nums[i]; // 计算目标值与当前数值的差值

        // 检查哈希表中是否存在这个差值
        if (numMap.find(complement) != numMap.end()) {
            // 如果存在,返回该差值的索引和当前数值的索引
            return {numMap[complement], i};
        }

        // 否则,将当前数值和它的索引添加到哈希表中
        numMap[nums[i]] = i;
    }

    // 如果没有找到符合条件的元素对,返回一个空向量
    return {};
}

int main() {
    vector<int> nums = {2, 7, 11, 15};
    int target = 9;

    vector<int> result = twoSum(nums, target);

    if (!result.empty()) {
        cout << "Indices of elements with sum " << target << ": ";
        cout << result[0] << ", " << result[1] << endl;
    } else {
        cout << "No two elements found with the given target." << endl;
    }

    return 0;
}

使用 unordered_map (哈希表) 存储已经访问过的元素及其索引。然后,通过计算目标值和当前元素的差值,检查哈希表中是否存在这个差值。如果存在,则返回对应的索引。如果不存在,将当前元素添加到哈希表中,继续下一个循环。这种方法确保每个元素最多只被访问一次,因此时间复杂度为 O(n)

在C++中,return {numMap[complement], i}; 这样的语法是使用初始化列表来创建一个std::vector(向量)对象,并直接返回该对象。这种语法也被称为列表初始化。

在这种情况下,{numMap[complement], i} 创建了一个包含两个整数的向量,分别是 numMap[complement] 和 i,它们分别代表了哈希表中目标值的索引和当前元素的索引。然后,这个向量被作为函数的返回值返回。

这种语法简洁明了,并且在返回多个值时很方便。

分析一下时间复杂度和空间复杂度

时间复杂度分析

在遍历数组时,每个元素都需要进行一些常数时间的操作,包括哈希表的插入和查找。
对于包含 n 个元素的数组,哈希表的插入和查找操作的平均时间复杂度是 O(1)。因此,整个遍历过程的时间复杂度是 O(n)。

空间复杂度分析

使用了一个哈希表来存储已经访问过的元素及其索引。
对于包含 n 个元素的数组,最坏情况下需要存储 n 个元素的索引,因此空间复杂度是 O(n)。
因此,这种方法的时间复杂度是 O(n),空间复杂度是 O(n)。相比于暴力法的时间复杂度 O(n^2),这种方法在效率上有明显的提升。

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

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

相关文章

JavaScript 日期对象

在 JavaScript 中&#xff0c;你可以使用 Date 对象来处理日期和时间。以下是一些常见的 Date 对象的使用方法&#xff1a; 1、创建日期对象&#xff1a; // 创建一个表示当前日期和时间的 Date 对象 let currentDate new Date();// 创建一个特定日期和时间的 Date 对象 let…

GPB | RegVar:基于深度神经网络的非编码区突变功能预测新方法

Genomics, Proteomics & Bioinformatics &#xff08;GPB&#xff09;发表了由军事医学研究院辐射医学研究所张成岗研究员、周钢桥研究员和卢一鸣副研究员团队完成的题为“RegVar: Tissue-specific Prioritization of Noncoding Regulatory Variants”的方法文章。我们的“…

数据结构 - 栈

目录 一. 栈的概念 二. 栈的结构 三. 栈的实现 1. 实现栈的两种方式 链表实现栈 顺序表实现栈 选择依据 栈的创建 栈的初始化 栈的销毁 入栈 出栈 获取栈顶元素 判断栈是否为空 获取栈中有效数据的个数 一. 栈的概念 栈&#xff08;Stack&#xff09;是一种重要…

VScode Failed to parse remote port from server output

在使用VScode 在连接AutoDL 过程中一直连接不上&#xff0c;显示 Failed to parse remote port from server output 在网上查了很多资料&#xff0c;貌似的没啥用。和我有相同 error 的可以尝试修改setting.json 文件。 添加这条命令&#xff08;我的json文件里面没有&#…

共享购:融合社交分享与消费返利的创新电商模式

共享购电商模式是一种独特的商业模式&#xff0c;巧妙地将社交分享与消费返利结合&#xff0c;让消费者在购物的同时&#xff0c;也能通过平台资产奖励实现价值的双重增长。该平台资产体系主要由共享值和共享积分两大要素构成&#xff0c;共同构建了一个充满活力的电商生态系统…

区块链技术与应用学习笔记(8-9节)——北大肖臻课程

目录 8.挖矿 对于全节点和轻节点思考问题&#xff1f; ①全节点在比特币的主要作用&#xff1f; ②挖矿时当监听到别人已经挖出区块并且延申了最长合法链此时应该立刻放弃当前区块在 本地重新组装一个指向最后这个新合法区块的候选区块&#xff0c;重新开始挖矿。节点这么做…

vivado 使用“链路 (Links)”窗口查看和更改链路设置

使用“链路 (Links) ”窗口查看和更改链路设置 创建链路后 &#xff0c; 就会将其添加到“ Links ”视图 &#xff08; 请参阅下图 &#xff09; 中 &#xff0c; 该视图是更改链路设置和查看状态的主要方法 &#xff0c; 也是最佳方法。 “ Links ”窗口中的每一行都对应 1 …

pymilvus创建多向量

pymilvus创建多向量 从 Milvus 2.4 开始&#xff0c;引入了多向量支持和混合搜索框架&#xff0c;单个collection可以支持10个向量字段。不同的向量字段可以表示不同的方面、不同的embedding模型甚至表征同一实体的不同数据模态。该功能在综合搜索场景中特别有用&#xff0c;例…

python学习笔记----python基础语法(二)

一、字面量 在 Python 中&#xff0c;字面量 是一种直接在代码中表示其自身值的数据。字面量用于创建值&#xff0c;并且可以直接被 Python 的解释器识别和处理。不同类型的数据有不同的字面量形式。下面是一些常见的字面量类型&#xff1a; 二、注释 注释&#xff1a;在程序…

[Android14] SystemUI的启动

1. 什么是System UI SystemUI是Android系统级应用&#xff0c;负责反馈系统及应用状态并与用户保持大量的交互。业务主要涉及的组成部分包括状态栏(Status Bar)&#xff0c;通知栏(Notification Panel)&#xff0c;锁屏(Keyguard)&#xff0c;控制中心(Quick Setting)&#xff…

Babylon.js和Three.js的区别

Babylon.js和Three.js都是基于WebGL的3D图形库&#xff0c;它们使得开发者能够在网页上创建和展示3D内容。尽管它们的目标相似&#xff0c;但在设计理念、功能集、性能和社区支持等方面存在一些差异。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢…

SpringCloud引入SpringBoot Admin

Spring Boot Admin可以监控和管理Spring Boot&#xff0c;能够将 Actuator 中的信息进行界面化的展示&#xff0c;也可以监控所有 Spring Boot 应用的健康状况&#xff0c;提供警报功能。 1. 创建SpringBoot工程 2. 引入相关依赖 <dependency><groupId>com.alib…

MinIO分布式文件系统介绍

1、不同存储方式的对比&#xff1a; 2、 分布式文件系统对比 3、MinIO的特点 MinIO特点 数据保护&#xff1a;Minio使用Minio Erasure Code&#xff08;纠删码&#xff09;来防止硬件故障。即便损坏一半以上的driver&#xff0c;但是仍然可以从中恢复。 高性能&#xff1a;作…

PID算法学习

PID算法介绍 在过程控制中&#xff0c;按偏差的比例&#xff08;P&#xff09;、积分&#xff08;I&#xff09;和微分&#xff08;D&#xff09;进行控制的PID控制器&#xff08;亦称PID调节器&#xff09;是应用最为广泛的一种自动控制器。它具有原理简单&#xff0c;易于实…

冯唐成事心法笔记 —— 知世

系列文章目录 冯唐成事心法笔记 —— 知己 冯唐成事心法笔记 —— 知人 冯唐成事心法笔记 —— 知世 冯唐成事心法笔记 —— 知智慧 文章目录 系列文章目录PART 3 知世 成事者的自我修养怎样做一个讨人喜欢的人第一&#xff0c;诚心第二&#xff0c;虚心 如何正确看待别人的评…

MQTTX工具获取及使用

工具获取地址&#xff1a;百度网盘 请输入提取码 新建连接 订阅主题

Redis分布式锁手动实现

Redis分布式锁手动实现 java中锁机制 在 Java 中&#xff0c;锁是用来同步并发访问共享资源的机制。它确保了在一个时间点&#xff0c;只有一个线程可以执行某个代码块或方法&#xff0c;从而防止了数据的不一致和竞态条件。Java 提供了多种锁机制&#xff0c;包括内置锁&…

全国各地级市财政收入支出明细统计数据2003-2022年

01、数据简介 全国各地级市财政统计主要是按地级市财政支出和财政收入两项统计&#xff0c;反映地区财政资金形成、分配以及使用情况的统计&#xff0c;​是由地区各地级市统计局统计公布&#xff0c;是加强财政资金管理使用的依据&#xff0c;研究国民收入分配和再分配的重要…

山东省2024年首版次测试报告具体的要求是什么?

山东省首版次测试报告的具体要求可能会根据每年的政策调整、行业变化以及申报的具体产品而有所不同。但一般而言&#xff0c;山东省首版次测试报告需要满足以下一些基本要求和标准&#xff1a; 1.完整性&#xff1a;测试报告应涵盖所有关键的测试环节&#xff0c;包括但不限于测…

张小泉签约实在智能,用实在Agent打造自动化高

在不少老杭州人的童年记忆里&#xff0c;妈妈裁剪衣服、料理食材、修剪各种物品&#xff0c;用的都是张小泉刀剪。 近日&#xff0c;实在智能与“刀剪第一股”张小泉&#xff08;股票代码&#xff1a;301055.SZ&#xff09;正式达成合作&#xff0c;实在Agent数字员工助力张小…
最新文章