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

【C++刷题】力扣-#1-两数之和

问题描述

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案,但是数组中同一个元素不能使用两遍。

算法设计

我们可以使用哈希表来存储数组元素及其索引,这样我们就可以在 O(1) 时间内查找目标值与当前元素的差值是否已经在哈希表中出现过。

  1. 初始化一个空的 map,用于存储数组元素及其索引。
  2. 遍历数组中的每个元素:
    ○ 计算目标值与当前元素的差值。
    ○ 检查这个差值是否已经在哈希表中存在:
    ■ 如果存在,说明我们找到了一对和为目标值的元素,返回它们的索引。
    ■ 如果不存在,将当前元素及其索引存入哈希表中。
  3. 如果遍历结束后没有找到符合条件的元素对,返回一个空的 vector。

代码实现

vector<int> twoSum(std::vector<int>& nums, int target) {map<int, int> indexMap;for (int i = 0; i < nums.size(); i++) {int complement = target - nums[i];if (indexMap.find(complement) != indexMap.end()) {return {indexMap[complement], i};}indexMap[nums[i]] = i;}return {}; // 返回一个空的 vector 表示没有找到解
}

复杂度分析

● 时间复杂度:O(n),其中 n 是数组 nums 的长度。我们只需要遍历一次数组。
● 空间复杂度:O(n),因为我们需要存储所有元素的索引到哈希表中。
这个算法的优势在于它的时间效率较高,只需要遍历一次数组。使用哈希表可以在平均情况下快速查找元素,使得算法的效率大大提升。


http://www.mrgr.cn/news/49191.html

相关文章:

  • 【微服务】springboot3 集成 Flink CDC 1.17 实现mysql数据同步
  • Python 字典:解锁高效数据处理的秘密武器
  • Linux进程控制(3)(进程程序替换2 -- 微型shell)
  • PyTorch gather与scatter_详解
  • 视频格式转换
  • Spring Boot知识管理:智能搜索与分析
  • 常用STL容器(c++)
  • 【畅捷通-注册安全分析报告】
  • 【python】内置装饰器-@property
  • unordered_set、unordered_multiset、unordered_map、unordered_multimap的介绍及使用
  • gitlab的基本用法之创建用户和组
  • 美国的社会分裂延续至AI领域
  • 02.07.链表相交 最简方法之一
  • 【解锁AI潜能:如何通过精确Prompt撰写引导智能对话】
  • JavaWeb 18.过滤器
  • 一文通透OpenAI o1:从CoT、Self-Correct/STaR、Self-play RL、MCST等技术细节到工程复现
  • 一些硬件知识【20241013】
  • 股市投资,如何应对人性挑战与把握关键策略?
  • 【JavaScript】Array的unshift的实现
  • 文件和目录的权限管理