博客
关于我
剑指 Offer 57. 和为s的两个数字
阅读量:643 次
发布时间: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/

你可能感兴趣的文章
scala Tuple入门到熟悉
查看>>
RDD partitioner入门详解
查看>>
presto查询报错
查看>>
superset报错
查看>>
Hive 分组取Top N
查看>>
yarn开启Label Scheduler
查看>>
Spark sample入门到精通
查看>>
C++ Primer Plus【复习笔记】-【复合类型】
查看>>
Android调试之断点进程选择
查看>>
前端一些要会的知识点
查看>>
VUE +ElementUI form表单回车提交
查看>>
空值合并(Null-ish Coalescing)
查看>>
使用Spring AOP应该注意的一个小细节
查看>>
java 生产服务器无法收到header请求头参数或者ip
查看>>
git 常用操作
查看>>
学习Swoole之进程队列之间通信
查看>>
设置Mysql5.6允许外网访问详细流程
查看>>
docker 快速安装bcmath扩展
查看>>
2020-08-26
查看>>
shell脚本一键删除php7.4.8
查看>>