力扣算法学习之两数之和

题目链接

https://leetcode.cn/problems/two-sum/description/

题目截图

在这里插入图片描述

题目代码

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
const twoSum = function (nums, target) {
    const map = new Map();// 新建map
    for (let i = 0; i < nums.length; i++) {
        if (map.has(target - nums[i])) { // 目标值 - 当前值 = 当前距离目标的差值,如果这个差值存在于map里面
            return [map.get(target - nums[i]), i];// 读取他的下标和本次的下标
        }
        map.set(nums[i], i);//没有找到则把本次的值作为key,下标作为值存到map中
    }
    return [];
};

理解

由题可知,主要是要从nums这个数组中找两个加起来等于taeget的数,且都是整数。
首先声明twoSum函数使用形参nums以及target接收指定的数据。

在函数一执行,便声明一个map用来存储数组中的值和下标,其中数组元素的值做为map的key,下标作为map的值。

已知
target 是需要找的值
nums[i] 是每次循环的数组元素值
target-nums[i] 是每次循环的数组元素值与目标值target之间的差

这个差需要在数组当中找,而数组中的值最后都会存到map中。

循环中判断 map.has(target - nums[i]) map中有没有一个值是等于target-nums[i] 的值,有的话就是当前循环的数组元素值,和map中key等于差的元素可以满足题目要求,将当前的i和map中key存储的值,也就是另一个数组下标进行返回。

如果没有找到,则进行下一次循环,循环结束没有找到则是数组中没有条件符合的。

  • 9
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值