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

剑指offer57_和为S的两个数字

和为S的两个数字


输入一个数组和一个数字 s,在数组中查找两个数,使得它们的和正好是 s。

如果有多对数字的和等于 s,输出任意一对即可。

你可以认为每组输入中都至少含有一组满足条件的输出。

数据范围

数组长度 [1,1002]。

样例
输入:[1,2,3,4] , sum=7输出:[3,4]

算法思路

(这就是leetcode第一题,没啥好说的,哈哈。)

核心思路是使用哈希表存储遍历过的数字,对于每个当前数字 x,检查哈希表中是否存在 target - x

  • 若存在,则找到答案,返回 {x, target - x}
  • 若不存在,则将当前数字 x 加入哈希表,继续遍历。
时间复杂度
  • O(n):遍历数组一次(n 为数组长度),哈希表的插入和查找操作平均时间复杂度为 O(1)。
空间复杂度
  • O(n):最坏情况下需要存储所有数组元素(哈希表大小与数组长度线性相关)。
class Solution {
public:vector<int> findNumbersWithSum(vector<int>& nums, int target) {// 使用哈希表存储已遍历的数字unordered_set<int> hash;for (auto x : nums) { // 遍历每个数字// 检查 target - x 是否在哈希表中if (hash.count(target - x)) {// 找到匹配:返回当前数字x和补数(target-x)return {x, target - x};}// 未找到匹配:将当前数字加入哈希表hash.insert(x);}// 未找到任何匹配(题目保证有解,此步可省略)return {};}
};

实例演示

假设输入数组 nums = [1, 2, 3, 4],目标值 target = 6

  1. 遍历 x=1
    • 检查 6-1=5 是否在哈希表 {} → 不存在
    • 插入 1 → 哈希表 {1}
  2. 遍历 x=2
    • 检查 6-2=4 是否在哈希表 {1} → 不存在
    • 插入 2 → 哈希表 {1, 2}
  3. 遍历 x=3
    • 检查 6-3=3 是否在哈希表 {1, 2} → 不存在
    • 插入 3 → 哈希表 {1, 2, 3}
  4. 遍历 x=4
    • 检查 6-4=2 是否在哈希表 {1, 2, 3}存在!
    • 返回结果 {4, 2}(顺序为 [x, target-x]

最终输出:[4, 2](满足 4+2=6)。

http://www.dtcms.com/a/275861.html

相关文章:

  • 深入详解:决策树在医学影像脑部疾病诊断中的应用与实现
  • Java 属性配置文件读取方法详解
  • 《Java HashMap底层原理全解析(源码+性能+面试)》
  • LangChain 的链(Chain)
  • Java 接口与抽象类:深入解析两者的区别及应用场景
  • 【深度学习】常见评估指标Params、FLOPs、MACs
  • 牛客:HJ19 简单错误记录[华为机考][字符串]
  • 多表查询-4-外连接
  • EMC接地
  • 试用了10款翻译软件后,我只推荐这一款!完全免费还超好用
  • 6.isaac sim4.2 教程-Core API-多机器人,多任务
  • 单细胞入门(1)——介绍
  • C语言中整数编码方式(原码、反码、补码)
  • C++ 模板工厂、支持任意参数代理、模板元编程
  • 如何使用postman做接口测试?
  • dify 用postman调试参数注意
  • MOSFET驱动电路设计时,为什么“慢”开,“快”关?
  • 《Java Web程序设计》实验报告二 学习使用HTML标签、表格、表单
  • 零基础搭建监控系统:Grafana+InfluxDB 保姆级教程,5分钟可视化服务器性能!​
  • elementuiPlus+vue3手脚架后台管理系统,上生产环境之后,如何隐藏vite.config.ts的target地址
  • 游戏开发日记7.12
  • 现代C++打造音乐推荐系统:看看如何从0到1实现
  • 80. 删除有序数组中的重复项 II
  • Web学习笔记3
  • 网络检测:Linux下实时获取WiFi与热点状态
  • 游戏开发团队并非蚂蚁协作(随记):在各种“外部攻击”下保护自己的工具
  • C++中的容斥原理
  • css 判断是ios设备 是Safari浏览器
  • 敏捷开发方法全景解析
  • vue2和vue3的响应式原理