正常思路,循环嵌套。用了一些技巧,如 indexOf, map。但对真实效率没有帮助。换用前置数组后,效率能提高一些。注意,题目中没有说,数组不能为负。
155ms,排名64%
var twoSum = function(nums, target) {
var search = [];
for(var i = 0 , j; i<nums.length; i++){
// if(nums[i]<=target){
j = search.indexOf(target - nums[i]);
if( j > -1 ){
return [j,i];
}else{
search.push(nums[i]);
}
// }
}
return 0;
};
使用对象方法, 达到 102 ms,91%
var twoSum = function(nums, target) {
var search = {};
for(var i = 0 , j; i<nums.length; i++){
// if(nums[i]<=target){
if( search.hasOwnProperty(target - nums[i]) ){
return [search[target-nums[i]],i];
}else{
search[nums[i]] = i;
}
// }
}
return 0;
};
使用对象,直接取值法。效率反而还低了。105ms , 86%。将判断条件改为 != undefined 后,效率更低。看来判断的方式与比较的对象对效率影响很大!! obj 的 hasOwnProperty() 效率比数组要高。
var twoSum = function(nums, target) {
var search = {};
for(var i = 0 , j; i<nums.length; i++){
// if(nums[i]<=target){
// console.log(search[target-nums[i]] , i)
if( (j = search[target-nums[i]])>-1 ){
return [j,i];
}else{
search[nums[i]] = i;
}
// }
}
return 0;
};

本文探讨了LeetCode上经典问题“两数之和”的多种解法,包括使用数组、对象属性查找等方法,并对比了不同实现方式的时间效率。实验结果显示,利用对象的hasOwnProperty方法进行查找效率最高。
817

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



