我们只是彼此的过ke

文章 评论 浏览 27

我们只是彼此的过ke 2022-05-04 13:55:56

思路一:暴力破解法

function twoSum(nums, target) {
  for (let i = 0; i < nums.length; i++) {
    for (let j = 0; j < nums.length; j++) {
      if (i !== j && nums[i] + nums[j] === target) {
        return [i, j]
      }
    }
  }
}

由于进行了双重循环,时间复杂度是O(n^2), 空间复杂度O(1)

思路二:两趟哈希表

function twoSum(nums, target) {
  const map = {}
  for (const [i, n] of nums.entries()) {
    map[n] = i
  }
  for (const [i, n] of nums.entries()) {
    let number = target - n
    if (number in map) {
      return [i, map[number]]
    }
  }
}
  • 先用一个哈希表存储数组的值于对应数组下标,然后再遍历数组寻找结果
  • 时间复杂度O(n), 空间复杂度O(n)

思路三:一趟哈希表

var twoSum = function(nums, target) {
  const map = {}
  for (let i = 0; i < nums.length; i++) {
    const n = nums[i]
    if (target - n in map) {
      return [map[target - n], i]
    } else {
      map[n] = i
    }
  }
}
  • 在给哈希表添加元素的同时寻找有没有符合目标的答案,如果有就直接返回,没有就继续构造哈希表。
  • 时间复杂度O(n), 空间复杂度O(n)

第二种思路可能有点问题,当数组内容都是重复的内容例如twoSum([2,2,2,2],4)

第 86 题:算法题之「两数之和」

更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文