JavaScript

两数求和算法

2021-03-10  本文已影响0人  Lia代码猪崽

题目

假设有一个整数数组 nums ,写一个方法 twoSum() ,返回数组中两个元素之和等于入参的下标数组。

假设:

算法优化解析

  1. 所有 求和 的问题都可以转换为 求差
  2. 像这题目普遍做法是双层循环嵌套,但这时间复杂度就是 O(n^2) ,应该考虑用空间换时间,只遍历一次,遍历的同时,通过 映射关系 把之前遍历过的数据存下来,把复杂度转化为 O(n)

所以本题目:

解法一:js 对象

const nums = [1, 2, 3, 4]
const target = 6

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

twoSum()  // [1, 3]

解法二:Map 对象

const nums = [1, 2, 3, 4]
const target = 6

function twoSum() {
  let numberMap = new Map()
  for (let i = 0; i < nums.length; i++) {
    if (numberMap.has(target - nums[i])) {
      return [numberMap.get(target - nums[i]), i]
    }
    numberMap.set(nums[i], i)
  }
}

twoSum()  // [1, 3]
上一篇 下一篇

猜你喜欢

热点阅读