题目:
给一个数组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%的用户
*/
这是一篇关于LeetCode简单题目‘两数之和’的解题分享,文中详细介绍了使用JavaScript解决此问题的四种方法,包括传统函数定义、箭头函数等,并提供了解题代码和在LeetCode上的执行结果。
874

被折叠的 条评论
为什么被折叠?



