侧边栏壁纸
博主头像
Fonda's Lab 博主等级

关山难越,谁悲失路之人?萍水相逢,尽是他乡之客。

  • 累计撰写 49 篇文章
  • 累计创建 27 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

两数之和

LouisFonda
2024-02-09 / 0 评论 / 0 点赞 / 5 阅读 / 0 字 / 正在检测是否收录...

两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

nums = [1,2,3] target = 4 return[0,2]

这是一个非常简单的题,前端面试经常会考,但是考的点并不是你能不能解出这个题,一般的思路就是先取一个数,然后遍历剩余的数,如果有个数和上一次取的数相加,结果等于target,就把下标返回,直接上代码。

const twoSum = function (nums, target) {

  const n = nums.length;

  for (let i = 0; i < n; i++) {

    for (let j = 0; j < n; j++) {

      if (j === i) continue;

      if (nums[i] + nums[j] === target) return [i, j];

    }

  }

思路2: 目标值是由两个值相加得来的,所以这两个数是互补的,所以我们只要把target-当前值的结果作为map的key,把当前值的下标作为value存到map里面之后只需检查map的key就行,如果没有这个值就存进去,如果有,就把这个key对应的值取出来,再加上当前值的下标,就是我们要的结果。

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

是不是非常的简单,这个题会让你深刻的体验到为什么叫数据结构与算法,为什么不单独叫算法,像map这种映射结构天生就适合做这种事,还有set这种非常适合去重,能把时间复杂度直接从O(n^2)降到O(n),提升非常的大。

0

评论区