leetcode 第一题 twoSum
发布日期:2021-05-12 18:45:27 浏览次数:21 分类:精选文章

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

为了解决这个问题,我们需要找到数组中两个数,使得它们的和等于给定的目标值,并返回这两个数的数组下标。我们可以通过优化的方法来实现这一目标,而不是使用暴力法,这样可以提高效率。

方法思路

我们可以使用哈希表(也称为集合)来优化这个问题。哈希表的查找操作平均时间复杂度为 O(1),因此可以显著降低整体的时间复杂度。

具体步骤如下:

  • 初始化一个空的哈希表,用于存储已经遍历过的元素及其对应的下标。
  • 遍历数组中的每一个元素 num:
    • 计算目标值减去当前元素 num,得到所需的另一个数 complement。
    • 检查哈希表中是否存在 complement。如果存在,说明已经找到了满足条件的两个数,返回这两个数的下标。
    • 如果不存在 complement,将当前元素 num 和它的下标存入哈希表,继续下一个元素。
  • 如果遍历完整个数组都没有找到符合条件的两个数,返回空数组。
  • 这种方法的时间复杂度为 O(n),空间复杂度为 O(n),因为我们需要存储所有元素到哈希表中。

    解决代码

    #include 
    #include
    using namespace std;vector
    twoSum(vector
    nums, int target) { unordered_map
    hash_map; for (int i = 0; i < nums.size(); ++i) { int complement = target - nums[i]; if (hash_map.count(complement)) { return {hash_map[complement], i}; } hash_map[nums[i]] = i; } return {};}

    代码解释

  • 哈希表初始化:我们使用 unordered_map 来存储元素及其对应的下标。键是元素的值,值是其在数组中的下标。
  • 遍历数组:对于每个元素 nums[i],计算 complementtarget - nums[i]
  • 查找补数:检查哈希表中是否存在 complement。如果存在,返回哈希表中 complement 的值(即下标)和当前元素的下标 i
  • 存入哈希表:如果没有找到 complement,将当前元素及其下标存入哈希表。
  • 返回结果:如果遍历完整个数组都没有找到符合条件的两个数,返回空向量。
  • 这种方法确保了在找到符合条件的两个数时,能够快速返回结果,从而提高了效率。

    上一篇:git公钥出错“//.ssh/id_rsa“ failed: No such file or directory
    下一篇:git的 我自己常用的指令 汇总一下

    发表评论

    最新留言

    能坚持,总会有不一样的收获!
    [***.219.124.196]2025年05月18日 10时38分25秒