2017-04-20 52 views
0

我正在做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=28-4=4。所以,我的哈希表應該是這樣的,根據我的代碼:

6:0 5:1 7:2 2:3 4:4

如果事情是不是在哈希表,我想把它扔進哈希值。當我遇到散列號中的數字時,我返回hash[nums[i]]i,因爲我已經準備好索引了,hash[nums[i]]具有我需要的索引值。我不確定爲什麼我得到一個未定義的。任何建議,使這更好​​?

+0

問題1:你每次調用'twoSum'你開始與一個空'hash'陣列 –

+0

你不使用HashMap時間。這是一個普通的數組。 – reporter

+0

問題2:因爲'hash'數組是空的,所以你的循環總是有'!hash [need]'爲真(因爲!undefined == true)...所以你會用'nums.length 'value,並且什麼都不返回(因此返回undefined) –

回答

0

請參閱代碼。我已經刪除了其他部分,並在最後返回散列。請讓我知道這是你在找什麼。

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; 
 
    } 
 
    } 
 
    return hash; 
 
}; 
 

 
console.log(twoSum([2,3,1,6,4],8))

+0

這不是我正在尋找,但我設法使用一個對象創建一個哈希表。不知道我是否可以問這個問題,但是,如果我的代碼只有在兩個數字合計時才返回索引,您能否給我反饋?這裏是我更新的代碼:https://repl.it/HSu0/1 – emvo

+0

對不起Envo。問題不清楚,看起來與你最初的問題有很大的不同。建議你發佈這個新問題。謝謝。 –