今天又是神奇的一天,今天是小编默默的打开了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
,内存消耗毫无变化。
本文结束,有什么问题和有错误的地方,欢迎大家的留言和评论,还有后续更新,下期更加精彩 ”