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

剑指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.xdnf.cn/news/15423.html

相关文章:

  • 串口连接工控机
  • 【离线数仓项目】——电商域DIM层开发实战
  • 服务端高效处理拖拽排序
  • 锁相环初探
  • 【6.1.2 漫画分布式事务技术选型】
  • BaseDao 通用更新方法设计与实现
  • 【PMP备考】敏捷思维:驾驭不确定性的项目管理之道
  • Java ThreadLocal详解:从原理到实践
  • 快速过一遍Python基础语法
  • 第34次CCF-CSP认证第4题,货物调度
  • 零基础搭建监控系统:Grafana+InfluxDB 保姆级教程,5分钟可视化服务器性能!​
  • Python 中的 encode() 和 decode() 方法详解
  • JavaSE常用类
  • 开阳630HV100芯片的外设配置
  • 【C++】封装红黑树模拟实现set和map
  • C语言<数据结构-单链表>(收尾)
  • Linux反弹shell的几种方式
  • Java 接口详解:从基础到高级,掌握面向对象设计的核心契约
  • linux系统mysql性能优化
  • 【理念●体系】迁移复现篇:打造可复制、可复原的 AI 项目开发环境
  • AI产品经理面试宝典第12天:AI产品经理的思维与转型路径面试题与答法
  • 车载诊断架构 --- 诊断功能开发流程
  • 分析与展望
  • Linux:信号
  • Armstrong 公理系统深度解析
  • 一文讲清楚大语言模型核心:Transformer 内部运行原理详解,看这一篇就够了!
  • Datawhale AI夏令营 MCP初体验——简历小助手
  • 2.单例模式
  • 用 Python 将分组文本转为 Excel:以四级词汇为例的实战解析
  • python-while循环