算法题:1. 两数之和
这题其实1年前就做过, 不过当时只会暴力枚举法,现在再补过hash表的解法
题
暴力枚举
function twoSum(nums: number[], target: number): number[] {
for(let i = 0; i < nums.length-1; i++){
for(let j = i + 1; j < nums.length; j++){
if(nums[i] + nums[j] === target){
return[i, j];
}
}
}
return [];
};
hash表
function twoSum(nums: number[], target: number): number[] {
const map = new Map<number,number>()
for(let i = 0; i < nums.length; i++){
if(map.has(target - nums[i])){
return[map.get(target - nums[i]), i];
}
map.set(nums[i], i);
}
return [];
};
总结
从结果中可以看出:hash表写法省时间,但是占空间;而暴力枚举省空间但是花费的时间较多。
两种方法没有谁优谁劣,根据场景使用。
还有就是发现leetcode一年前的代码拿到现在提交的话,同一份代码执行会多出几十ms:
评论