LeetCode第一题两数之和(JavaScript版)

本文介绍了两种解决寻找数组中两个数之和等于目标值的方法:暴力法和哈希表法。暴力法通过双重循环遍历数组,时间复杂度较高。哈希表法利用哈希表存储数组元素及其索引,降低时间复杂度至O(N)。JavaScript实现中,哈希表法利用Map存储元素,通过查找差值来快速找到目标解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

暴力法

原理

伪代码

哈希表法

原理

伪代码

js版


暴力法

原理

伪代码

•   function(nums,target) -->[]
//题目给的function,nums数组,target目标值;要求你返回数组     [],里面存储下标(谁的,目标值的)
•   result=[]
//建立一个储存下标的数组[],长度为2
•   for i in [0,length(nums)]
•   for j in[i+i,length(nums)]
//建立两个指针i,j;其中i是起始固定的,j是往后移动的;i和j的范围(i从0到数组最后,j从1到数组最后;j永远在i后面一个单位)
•   sum = nums[i] + nums[j]
//统计下标为i和j的数组到sum中,然后让sum和target比较,成功则赋值跳出
•   if sum =target
•   result[0]=i
•   result[i]=j
•   return result
//据说到这就结束了
•   return  result
//如果是java;而python不需要这句return,JavaScript按理说同python也不需要
    
​
​
​

哈希表法

好处:如果是遍历一遍取下标,复杂度为O(N),哈希表貌似低

原因:正常遍历会因元素个数和目标值的位置而影响;如果有100元素,恰目标值处于最后,要遍历很多次(将近100次)

哈希表则遍历一次储存表中,再次遍历把目标值拿到哈希表中比对(听起来好像只用两次o(2))少很多

原理

伪代码

    function(nums,target)
    result=[]
    map = HashTable()
//建立哈希表map
​
    for i in[0,length(nums)]
    map.add(nums[i],i)
//定义完i,j范围,接着补充到map表中
    for j in[0,length(nums)]
//记不记得js中的for循环的功能是遍历;通过遍历我们找到差值
    diff=target - nums[j]
//diff记录目标值与指针j的差值,然后差值在哈希表中查找返回
    if(map.containskey(diff)and
    map.get(diff)!=j)
//这里是说如果哈希表中有符合差值的;且不是重复的本身(题目中的要求不能是同一个元素)
//如果真的在哈希表中找到了和diff差值相等的数,说明了鸡毛,
我们把索引0,i修改为j和diff差值所在的索引
    result[0]=j
    result[i]=map.get(diff)
    return result
//java需要
return result
​
​
​

js版

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
    // 创建新map
    const map = new Map();
    // for遍历数组nums
    for(let i =0;i<nums.length;i++)
    {
        // 对比map中的差值
        const deff =target - nums[i];
        if(map.has(deff)){
            // 若存在,返回deff下标
            return[map.get(deff),i]
            // 这是什么写法?
​
        }else{
            // 若没有把num[i]当做key
            // i当做value;调换了顺序,思考原因
            map.set(nums[i],i)
​
        }
    }
    return[]
​
};

分析:

js版关于i当value不是很懂;原始哈希表难到不是这样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白村第一深情

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值