LeetCode刷题记: 两数相加

1 篇文章 0 订阅
1 篇文章 0 订阅

写在前面:

为了提升算法水平与熟悉JavaScript基本功能,决定去LeetCode做做算法题,这个网站支持多种语言,当然包括最火热的JavaScript啦,我是按照页面默认排序写的,无视难度,简单的自己写,然后Google更优答案,困难的自己好久都想不出的话就直接Google答案


1. Two Sum (两数相加)

题目

给定一个整数数组,返回两个数的index,使它们相加为一个特定的值

样例

提供: nums = [2, 7, 11, 15], target = 9,

因为 nums[0] + nums[1] = 2 + 7 = 9,
所以 return [0, 1].

思路

为了降低复杂度,使用JavaScript的内置对象 Map或者使用纯数组来进行操作

样例一

    /**
     * @param {number[]} nums
     * @param {number} target
     * @return {number[]}
     * 这种先生成查找表的方法不能使用数组进行存储,因为如果是输入的nums有重复的数的话,比如 [1,4,4,5],结果会是这样:
     *  1 -> 0
     *  4 -> 2 
     *  5 -> 3
     */
    var twoSum = function (nums, target) {
        // 用于记录数组nums的长度
        const length = nums.length;
        // 实例化一个Map对象
        let hash = new Map();
        let index = 0;
        for (index = 0; index < length; index++) {
            // 设置 hashMap 的 <key, value>,用于后面比较取值
            hash.set(nums[index], index);
        }

        // 遍历数组中的每一个数,求出另一个与其相加可以满足条件的数的值,存储在 @param numToFind 中
        let numToFind;
        for( index = 0; index < length; index++) {
             numToFind = target - nums[index];
             // 查询 hashMap 中对应的值是否有对应的index,而且不能是当前数的下标(防止出现 3 + 3 = 6,但数组nums中只有一个3这样的情况)
             if (hash.has(numToFind) && index !== hash.get(numToFind)) {
                  return [index, hash.get(numToFind)];
             }
         }
    };

样例二

当然,你也可以在一个循环中完成

    /**
     * @param {number[]} nums
     * @param {number} target
     * @return {number[]}
     */
    var twoSum = function(nums, target) {
        var len = nums.length;
        var exist = [];
        for(var i = 0; i < len; i++){
          if (exist[target - nums[i]] !== undefined){
              return [exist[target-nums[i]], i];
          }
          exist[nums[i]] = i;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值