题目链接:https://leetcode-cn.com/problems/two-sum/description/
思路:
第一种思路:暴力穷举法,两遍循环,时间复杂度为O(N²)。
第二种思路:目标是找到a+b=target,用变量a作为第一个数字遍历一遍数组,然后b=target-a,在a遍历的同时把元素丢入hash中,然后查找b。
我们列出第二种思路的代码:
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function(nums, target) {
let b;
// 申明一个hash,hash的key存储元素,value是个数组,存储该元素的下标
let hash = {};
for(let i = 0; i<nums.length; i++) {
b = target - nums[i];
// 把元素放到hash中
if(!(nums[i] in hash)) {
hash[nums[i]] = [i];
} else {
hash[nums[i]].push(i);
}
if(b in hash) {
if(nums[i] !== b) {
return [i, hash[b]].sort();
}
if(hash[b].length === 2) {
return hash[b].sort();
}
}
}
return [];
};
网友评论