博客
关于我
剑指 Offer 57. 和为s的两个数字
阅读量:644 次
发布时间:2019-03-15

本文共 970 字,大约阅读时间需要 3 分钟。

方法一:使用 set

思想:

遍历数组,如果 target - nums[i] 存在于 set 中,则 nums[i] 和 target-nums[i] 即为所求的数;否则,将 nums[i] 添加到 set 中。这种方法只需 O(N) 的时间复杂度,但需要 O(N) 的空间复杂度。

代码:

  

题目描述

给定一个数组 `nums` 和一个目标值 `target`,找到数组中两个不同的数使它们的和等于目标值。如果没有找到这样的数,则返回空集合。

方法一:使用 set

思想:

通过遍历数组中的每个元素 `nums[i]`,检查 `target - nums[i]` 是否存在于 `set` 中。如果存在,则 `nums[i]` 和 `target - nums[i]` 即为所求。如果不存在,则将 `nums[i]` 插入 `set` 中。这种方法的时间复杂度为 O(N),空间复杂度为 O(N)。

代码:

  class Solution {    public:    vector
twoSum(vector
& nums, int target) { set
s; for (int i = 0; i < nums.size(); ++i) { int complement = target - nums[i]; if (s.count(complement)) { return {nums[i], complement}; } s.insert(nums[i]); } return {}; } }

该方法通过使用 set 来记录已经遍历过的元素,并且在每次迭代时检查是否存在与当前元素互补的数,从而实现了高效的两数之和问题解决方案。这一算法在面对重复元素时也能正确工作,例如:当数组包含多个相同的数时,它会优先返回第一次找到符合条件的解。

转载地址:http://lrzmz.baihongyu.com/

你可能感兴趣的文章
cordova打包apk更改图标
查看>>
GitHub上传时,项目在已有文档时直接push出现错误解决方案
查看>>
文件系统的层次结构
查看>>
vue(渐进式前端框架)
查看>>
权值初始化和与损失函数
查看>>
vscode设置eslint保存文件时自动修复eslint错误
查看>>
Remove Extra one 维护前缀最大最小值
查看>>
wgcloud运维监控系统错误:防篡改校验错误次数大于10次,不再上报数据
查看>>
Linux操作系统的安装与使用
查看>>
C++ 继承 详解
查看>>
OSPF多区域
查看>>
Docker入门之-镜像(二)
查看>>
数据结构——链表(3)
查看>>
去了解拉绳位移编码器的影响因素
查看>>
无法初始化Winsock2.2处理
查看>>
vMotion 操作失败进度卡在14% ,报错: Operation Timed out
查看>>
重置UAG Application admin密码
查看>>
Horizon Daas租户管理平台扩展分配时报:内部错误
查看>>
嵌入式系统试题库(CSU)
查看>>
【自考】之信息资源管理(一)
查看>>