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

【C++刷题】力扣-#170-两数之和III-数据结构设计

题目描述

设计一个数据结构来找出一个整数数组中是否有两个数的和为特定目标值 target。该数据结构包含如下两个操作:

  1. add:向数据结构中添加一个数。
  2. find:返回数据结构中是否存在两个数的和等于给定的目标值 target,如果存在则返回 true,否则返回 false。

示例

add 示例:

add("num1")
add("num2")

find 示例:

find("9")

题解

这个问题可以通过使用哈希表来解决。哈希表可以用来存储已经添加的数以及它们出现的次数。

  1. 初始化:创建一个哈希表 hashMap 来存储添加的数。
  2. add 操作:当添加一个数时,将其添加到 hashMap 中,并更新它的计数。
  3. find 操作:当查找两个数的和时,遍历 hashMap 中的所有数,对于每个数 num,检查 target - num 是否也在 hashMap 中。如果存在,并且 num 不等于 target - num 或者 num 出现了至少两次(以处理相同数相加的情况),则返回 true。如果遍历结束后没有找到,则返回 false。

代码实现

class TwoSum {
private:unordered_map<int, int> hashMap;public:void add(int number) {hashMap[number]++;}bool find(int target) {for (const auto& pair : hashMap) {int num = pair.first;int count = pair.second;int complement = target - num;if (complement == num && count < 2) continue; // 相同数相加且只出现一次if (complement == num && count >= 2) return true; // 相同数相加且出现至少两次if (hashMap.find(complement) != hashMap.end()) return true; // 不同数相加}return false;}
};

复杂度分析

● add 操作的时间复杂度:O(1),添加一个数到哈希表中是常数时间操作。
● find 操作的时间复杂度:O(n),其中 n 是哈希表中元素的数量。在最坏情况下,我们需要遍历哈希表中的所有数。
● 空间复杂度:O(n),我们需要存储所有添加的数。
这个算法的优势在于它利用了哈希表的快速查找特性,使得 add 操作非常高效。find 操作虽然在最坏情况下需要遍历哈希表,但平均情况下性能仍然是可接受的。


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

相关文章:

  • 基础实验4-2.7 修理牧场
  • kernel panic 稳定性分析实例(三)
  • 线性可分支持向量机的原理推导
  • Shell编程-for循环
  • 【存储设备专栏 2.8 -- gio mount -d /dev/sdb1 挂载U盘后查看挂载的目录】
  • 2024年推荐的7个自助建站工具?
  • 深度学习笔记20_数据增强
  • 一文详解 requests 库中 json 参数和 data 参数的用法
  • 最强小模型又易主!Mistral发布小部长Ministral 3B、8B,登基边缘计算之王!
  • 玩转Prometheus的pushgateway和联邦集群
  • perl模式匹配修饰符
  • 人工智能学习框架
  • 案例分析:Modbus设备如何通过MQTT网关连接阿里云IoT
  • 【Spark SQL】文本函数及业务场景使用
  • 手撕数据结构 —— 堆(C语言讲解)
  • 关闭cloud tts
  • 范数,L2范数标准化,及其用法和意义
  • 闯关leetcode——111. Minimum Depth of Binary Tree
  • 【python爬虫实战】爬取全年天气数据并做数据可视化分析!附源码
  • 【MySQL】表的修改操作,插入查询结果