leetcode 简单题组之两数之和 四种方法

这是一篇关于LeetCode简单题目‘两数之和’的解题分享,文中详细介绍了使用JavaScript解决此问题的四种方法,包括传统函数定义、箭头函数等,并提供了解题代码和在LeetCode上的执行结果。

题目:

        给一个数组nums  一个整数目标值target

        在数组中找出和为target的2个数,并返回数组下标

        只存在一个有效答案

本题我使用了JavaScript解题:

        

        本题知识点复习:

             知识点1:在已知值的情况下,JS中如何创建数组?

             方法一:let nums=new Array(2,7,11,15);

             方法二:let nums=[2,7,11,15];

            上面很明显方法二写起来比较简单,所以下面使用了方法二写了数组

             知识点2:JS函数的创建与使用(由于本题涉及函数具有返回值,所以直接使用一种方法,其他创建函数方法各位自查吧)

             方法一:let getTwoSum=function(nums,target){代码};  

                          getTwoSum(nums,target);//注意:这里如果直接输出getTwoSum得到的是函数体,而非我们所想要的return的结果

             方法二:function getTwoSum(nums,target){代码}

                           getTwoSum(nums,target);

             方法三:使用箭头函数

                      let getTwoSum = (nums, target)=>{代码};

                      getTwoSum(nums,target);

              还有一种 let getTwoSum=new Function(nums,target);这种方法不推荐,因为代码会被解释两次,麻烦。

以下是解题代码及思路,以及在leetcode中的结果:

 var nums=[3,2,4];
        var target=6;
        //方法一:第一个数,和每一个数进行相加,看看能否符合target值,然后再依此看看其他数
        let getTwoSum = function(nums, target){
            for(var i=0;i<nums.length;i++){
                for(var t=i+1;t<nums.length;t++){
                    if(nums[i]+nums[t]==target){
                        return [i,t];
                    }
                }
            }
        };
        console.log(getTwoSum(nums,target));
        /*
        *执行用时:92 ms, 在所有 JavaScript 提交中击败了32.14%的用户  
        *内存消耗:38 MB, 在所有 JavaScript 提交中击败了41.91%的用户
        */
        //方法二:在第一种方法的基础上进行改进,如果一个数,比target还大了,后续遇到大于的零的数就可以直接跳过了,如果比target还小了,后面遇到小于零的数也可以跳过了
        //这个方法很明显比方法一在性能上有许多的提升
        let getTwoSum2 = function(nums, target){
            for(var i=0;i<nums.length;i++){
                for(var t=i+1;t<nums.length;t++){
                    if(nums[i]>target&&nums[t]>=0){
                        continue;
                    }
                    if(nums[i]<target&&nums[t]<0){
                        continue;
                    }
                    if(nums[i]+nums[t]==target){
                        return [i,t];
                    }
                }
            }
        };
        /*
        *执行用时:84 ms, 在所有 JavaScript 提交中击败了64.67%的用户
        *内存消耗:37.9 MB, 在所有 JavaScript 提交中击败了80.32%的用户
        */
        //方法三:比上面那个比的更详细了
        let getTwoSum2 = function(nums, target){
            for(var i=0;i<nums.length;i++){
                for(var t=i+1;t<nums.length;t++){
                    if((nums[i]>target&&nums[t]>=0)||(nums[i]<target&&nums[t]<=0)||(nums[t]>target&&nums[i]>0)||(nums[t]<=target&&nums[i]<0)){
                        continue;
                    }
                    if(nums[i]+nums[t]==target){
                        return [i,t];
                    }
                }
            }
        };
        /*
        *执行用时:80 ms, 在所有 JavaScript 提交中击败了80.67%的用户
        *内存消耗:38.1 MB, 在所有 JavaScript 提交中击败了33.74%的用户
        */
        //方法四:最强的时候,我想着,反正都得比对nums[i] nums[t]和target及0的大小,那我直接把它们往里面比,不满足条件根本不给他加的机会,这样融合了上面两个的优点了,绝了
        let getTwoSum2 = function(nums, target){
            for(var i=0;i<nums.length;i++){
                for(var t=i+1;t<nums.length;t++){
                    if((nums[i]>=target&&nums[t]<=0)||(nums[i]<=target&&nums[t]>=0)){
                        if(nums[i]+nums[t]==target){
                        return [i,t];
                        }
                    } 
                }
            }
        };
        /*
        *执行用时:68 ms, 在所有 JavaScript 提交中击败了99.18%的用户
        *内存消耗:37.8 MB, 在所有 JavaScript 提交中击败了87.83%的用户
        */

 

      

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值