美文网首页JavaScript
两数求和算法

两数求和算法

作者: Lia代码猪崽 | 来源:发表于2021-03-10 17:58 被阅读0次

题目

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

假设:

  • nums[1, 2, 3, 4]
  • sum6
  • 应返回 [1, 3]

算法优化解析

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

所以本题目:

  • 可通过备忘录模式来达到只循环一次。缓存的数据的映射关系应该为 { key(元素值): value(元素下标) }
  • 又因为 总和 - 当前值 = 目标值,查找 缓存的数据 中有无 目标值 ,若有则把 当前值目标值下标 返回,若无就缓存 当前值

解法一: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]

相关文章

  • 两数求和算法

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

  • 算法:两数求和

    两数之和 题目:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 tar...

  • 两数求和

    总结: 1、<<(左移运算符)的优先级大于 &(与运算)的优先级2、此题通过if(b==0)来控制迭代的终止3、如...

  • 三数求和算法

    题目 给你一个包含 n 个整数的数组 nums ,判断 nums 中是否存在三个元素 a,b,c ,使得 a + ...

  • 2、两链表数求和

    1、问题 给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一...

  • freeCodeCamp 旅途9 - 算法中级

    算法中级:范围内的数字求和 算法中级:区分两个数组 算法中级:瞄准和消灭 算法中级:罗密欧与朱丽叶 算法中级:短线...

  • 算法:两数之和

    给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同样的元素不能被重...

  • 算法-两数之和

    这是一道LeetCode上的问题,详见两数之和,难度标注是简单,但是我思考到了一些比较复杂的情况,之后我会修改题目...

  • 算法--两数之和

    问题描述: 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。 你可以假设每个输入只对应一种答案,且同样...

  • 算法「两数之和」

    题目:给出数组nums和目标值target,找出和为目标值的两个数在数组中 想法:定义数组和目标值,遍历数组x使得...

网友评论

    本文标题:两数求和算法

    本文链接:https://www.haomeiwen.com/subject/yfawqltx.html