leetcode-01-两数之和

举报
林太白 发表于 2025/11/12 09:36:29 2025/11/12
【摘要】 leetcode-01-两数之和

leetcode-01-两数之和

① 题目要求

数字A + B = target,以target为求和结果,找出数组中符合的A、B数字下标。

这里我拿白话文举个案例解释一下就是:

给你一个数组,比如[1,2,3,4,5],现在让你找出和为9的两个数字下标,也就是4,5下标,可以看到下标是4,5,所以返回[4,5]

第一次做算法的时候完全脑子一片蒙,无从下手,后来慢慢认真看了看题目发现是发现找符合target和的两个数字下标

建议大家也是第一次做的时候别慌,其实算法没有那么难,多刷就会了。

② 解题一(双层for)

看了题解以后,第一次以双层for循环暴力破解题目(复杂度O(n²))**

var twoSum = function (nums, target) {
    let datas = {};
    for (let i = 0; i < nums.length; i++) {
        for (let s = i + 1; s < nums.length; s++) {
            if (target==nums[i] + nums[s]) {
                return[i,s];
            }
        }
    }
};


var nums= [2,7,11,15];
var target = 9;
// twoSum([2,7,11,15],13); 
输出如下:
console.log(twoSum([2,7,11,15],13)); //2+11  [0,2]
console.log(twoSum([2,7,11,15],22)); //2+11  [1,3]

将判断条件进行改变以后【target-nums[i]== nums[s]】 代码进行了优化

简单粗暴,2for循环逐个遍历判断
 
  var twoSum = function (nums, target) {
  let datas = {};
  for (let i = 0; i < nums.length; i++)
 
    { for (let s = i + 1; s < nums.length; s++) {
 
       if (target-nums[i] == nums[s])
 
    { return[i,s];
 
  } } } };

③ 题解二(差值法)

考虑到哈希表利用总和减去其中一个数判断另外一个数是否存在,存在:返回进去的数字下标和差值数字的下标;不存在,则记录当前减去数字的下标,方便函数下次继续判断和使用【复杂度O(n1)】**

isNaN(6) true

var twoSum = function(nums, target) {
  var keys = {};
  for(var i = 0;i < nums.length; i++) {
    var diff = target - nums[i];
    // 判断差值diff在键值对中是否存在 是则找到匹配数字 数组第二个数字为7,下标为1
    // keys[diff]=7,i=2 
        if(!isNaN(keys[diff])) {
            // 返回减去的数字下标和差值数字的下标
            return [keys[diff], i];
        }
        // 未出现匹配值 将数字存入键值对中以备后续判断
      // 当前数字假设为第三个 nums[i]=7,keys[7]=1  i就是判断数字的下标  建立key值 方便下次使用
        // 若是7的差值不存在,当前数字7的下标就是1,将1记录为7的下标
        keys[nums[i]] = i;
  }
};
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。