为了找工作,开始了Leetcode刷题之路,因为目标方向是Web前端开发,所以采用JavaScript来进行刷题。
看到此题第一思路是用for循环,求target与nums[i]的每一个值的差值是否在nums数组内,实质上时间复杂度仍然是O(n²)。
var twoSum = function(nums, target) {
var res = [];
for(var i = 0; i < nums.length; ++i){
var b = nums.indexOf(target - nums[i]);
if(b != -1 && b != i){
res.push(i,b);
return res;
break;
}
}
};
于是经过思考,结合了Hash table(哈希表)的思想,做出了改进版的答案,时间复杂度为O(n)。
//hash
var twoSum = function(nums, target) {
let map ={};
for(let i = 0; i < nums.length; ++i){
let a = nums[i];
let b = target - a;
if(map[b] !== undefined){
return [map[b], i];
} else{
map[a] = i;
}
}
};
如果大家有什么修改的建议,可以联系我147276212⑨