我正在做LeetCode,Two Sum的第一個問題。我正在嘗試使用散列表來解決問題。這是我想出了:JavaScript - 我的哈希表出了什麼問題?
var twoSum = function(nums, target) {
var hash = [];
for(var i = 0; i < nums.length; i++) {
var need = target - nums[i];
if (!hash[need]) {
hash[need] = i;
} else {
return [hash[nums[i]], i];
}
}
};
當我運行我的代碼,我得到未定義作爲一個答案。假設我有一個數組[2,3,1,6,4]
,我的目標是8
。當我遍歷數組時,我會得到8-2=6
,8-3=5
,8-1=7
,8-6=2
和8-4=4
。所以,我的哈希表應該是這樣的,根據我的代碼:
6:0 5:1 7:2 2:3 4:4
如果事情是不是在哈希表,我想把它扔進哈希值。當我遇到散列號中的數字時,我返回hash[nums[i]]
和i
,因爲我已經準備好索引了,hash[nums[i]]
具有我需要的索引值。我不確定爲什麼我得到一個未定義的。任何建議,使這更好?
問題1:你每次調用'twoSum'你開始與一個空'hash'陣列 –
你不使用HashMap時間。這是一個普通的數組。 – reporter
問題2:因爲'hash'數組是空的,所以你的循環總是有'!hash [need]'爲真(因爲!undefined == true)...所以你會用'nums.length 'value,並且什麼都不返回(因此返回undefined) –