本人算法小白,希望各位大牛给予指导
2020.3.24
今天开始刷leetcode题
坚信付出努力就会有回报
使用数组解,复杂度为O(n^2),因为indexOf的复杂度为O(n)。
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function(nums, target) {
for(let i = 0;i<nums.length;i++){
let numTo = target-nums[i]
if(numTo === nums[i]){
nums[i] = true
}
let numHas = nums.indexOf(numTo)
if(numHas !== -1){
return [i,numHas]
}
}
};
使用map数据结构解,时间复杂度为O(n),因为哈希的查找复杂度为O(1),Set/Map都是这样,代价是哈希的存储空间通常为数据大小的两倍。
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function(nums, target) {
let map = new Map()
for(let i = 0,len=nums.length;i<len;i++){
let numTo = target-nums[i]
if(map.has(numTo)){
return [map.get(numTo),i]
}
map.set(nums[i],i)
}
};