正常思路,循环嵌套。用了一些技巧,如 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;
};