葵花宝典

vuePress-theme-reco 前端小菜-贺俊兰    2026
葵花宝典 葵花宝典

Choose mode

  • 关灯
  • 自动
  • 开灯
主页
分类
  • LeetCode
  • JavaScript
  • Node
  • 其他
  • VUE
标签
时间轴
author-avatar

前端小菜-贺俊兰

33

文章

7

标签

主页
分类
  • LeetCode
  • JavaScript
  • Node
  • 其他
  • VUE
标签
时间轴
  • LeetCode

    • 两数之和
    • 三数之和
    • 有效括号
    • 斐波那契数列
    • 杨辉三角
    • 相同的树
    • 简化路径

两数之和

vuePress-theme-reco 前端小菜-贺俊兰    2026

两数之和

前端小菜-贺俊兰 2020-08-10 LeetCode

# 介绍

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

例如

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
1
2
3
4

# 题解

方法千千万,我这里就列两种。

# 暴力破解

就是通过两层遍历循环,直接判断nums[i]+nums[i+1]=target,如果相等,return这两数的下标。

代码如下

/**
@param {number[]} nums
@param {number} target
@return {number[]}
*/
var twoSum = function(nums, target) {
    for(var i=0;i<nums.length-1;i++){
       for(var k=i+1;k<nums.length;k++){
           if(nums[i]+nums[k]==target){
               return [i,k]
              }
        }
    }
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14

此方式虽然是解决了这一题,但是效率有点低,leetCode提交验证执行用时:172 ms,这个时间有浮动, 但是也能反应出这个暴力破解确实速度有点慢,原因当然是两次循环的时候有重复计算,所以我又去探索了 下新的解决思路,也就是第二种方式,空间换时间。

# 空间换时间

我的理解就是,目标值是9,当我知道第一个数是2后,我知道我需要的数是什么了,那样我再去集合里去寻 找另一个数,这样的遍历就极大的缩短了两个数的匹配时间。

代码如下

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
    let obj = {};
    for (let i = 0; i < nums.length; i++) {
        let diff = target - nums[i];
        if (obj[diff] >=0 ) {
            return [obj[diff], i];
        }
        obj[nums[i]] = i;
    }
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

两数之和相对来说好理解一点,但是方式方法远不止我所理解的这两点,还有待提高与探索。

欢迎来到 葵花宝典
看板娘