本文共 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/