[不定时一题]Leetcode两数之和

时间:2022-07-25
本文章向大家介绍[不定时一题]Leetcode两数之和,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

Leetcode第一天

今天又是神奇的一天,今天是小编默默的打开了Leetcode题库的第一天,初生牛犊不怕虎,开足马力就是干。

最开始看到简单两个字,还是信息十足。但是读了3遍题目之后,整个人都沙雕了,扪心自问“我这也太菜了吧,读了3遍题目,脑子一片空白"。

接着疯狂读题,疯狂读题,上手就是暴力操作:

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
    for(var i = 0;i<nums.length;i++){
        for(var j =i+1;j<nums.length;j++){
            if(nums[i]+nums[j]==target){
                return [i,j]
            }
        }
    }
};

然后高兴得点击了执行代码的按钮,发现预期的结果还是正确的,完成了运行时间160ms,内存消耗38MB

我的天呐,这也行,但是越想越不对劲,题目中有一句话数组中同一个元素不能使用两遍,我这个写法存在同一元素使用多次的问题,这就不太开心了,继续发奋图强。

既然同一元素不能使用两遍,那么改变思路,设置一个空的集合,使用目标值减去数组中的值,结果如果存在于集合中那么返回下标,如果不存在放到集合中,因为Set集合会自动去重,所以就不再在同一元素的问题了。

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
    var num = new Set();
    for(var i = 0;i<nums.length;i++){
      if(num.has(target-nums[i])){
          return [nums.indexOf(target-nums[i]),i]
      }else{
        num.add(nums[i])
      }
    }
};

再次提心吊胆的点击了执行代码的按钮,结果如下:

在运行时间上提升了一半时间80ms,内存消耗毫无变化。

最后

本文结束,有什么问题和有错误的地方,欢迎大家的留言和评论,还有后续更新,下期更加精彩 ”