先看一道題:
給定一個(gè)數(shù)組 nums = [2, 7, 11, 15]
要求找出數(shù)組中任意兩個(gè)數(shù)相加等于 target = 9
返回兩個(gè)數(shù)的下標(biāo)
因?yàn)?nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
暴力破解方法采用兩重循環(huán):
var twoSum = function(nums, target) {
for(let x=0;x<nums.length;x++){
for(let y=x+1;y<nums.length;y++){
if(nums[x]+nums[y]===target){
return [x,y]
}
}
}
};
twoSum([2,7,11,15],9)

雖然兩層循環(huán)求出了結(jié)果,但是這個(gè)解決方法的時(shí)間復(fù)雜度為N的2次方。
要降低時(shí)間復(fù)雜度可以采用hashmap,hashmap是一種以鍵值對(duì)存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),但是它的鍵是通過散列函數(shù)生成的位置或索引,也正因?yàn)榇?,我們可以更快地訪問某個(gè)值(散列表的查找復(fù)雜度為O(1),而其他順序數(shù)據(jù)結(jié)構(gòu)如棧、隊(duì)列、鏈表的查找復(fù)雜度都為O(n),因?yàn)樾枰闅v。
JavaScript的Object本身就是hashmap,JavaScript 的對(duì)象屬性查找是哈希查找,時(shí)間復(fù)雜的是 O(1)