給定乙個整數陣列 nums 和乙個整數目標值 target,請你在該陣列中找出 和為目標值 target 的那 兩個 整數,並返回它們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素在答案裡不能重複出現。你可以按任意順序返回答案。
最容易想到的暴力法是列舉陣列中的每乙個數x
,尋找陣列中是否存在target - x ,
這裡使用了兩層for迴圈來求解。要想將時間複雜度降到o(n),可以考慮用雜湊表來尋找 target - x ,這樣就可以減少一層for迴圈,因為雜湊表是通過給定key的雜湊值來尋找對應的value的,查詢的時間複雜度是o(1)。
我們可以從頭到尾遍歷給定陣列,每列舉乙個元素 x ,就在雜湊表中查詢是否存在 target - x (注意,雜湊表中儲存的都是之前遍歷過的陣列的元素),這樣即使遍歷到最後乙個元素時,雜湊表中也會儲存完陣列中的其它元素。可能有會這樣乙個誤區:陣列中第乙個元素就是其中乙個加數,但此時雜湊表中並沒有值,會不會錯過了?我們要知道,結果是成對出現的(兩個數),這樣我們在遍歷都後面時總會遇到第二個加數,這時雜湊表中肯定會儲存了前面出現的第乙個加數。啊
列舉元素 x 時,我們應該先查詢 target - x,若沒有則將 x 放進雜湊表中(而不是先將x放入雜湊表中),這樣可以保證不會跟元素 x 自己匹配到。
var twosum = function(nums, target)
m.set(nums[i],i);
}return
;};
1 兩數之和
給定乙個整數陣列和乙個目標值,找出陣列中和為目標值的兩個數。你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所以返回 0,1 解class solution hash nums i...
1 兩數之和
給定乙個整數陣列和乙個目標值,找出陣列中和為目標值的兩個數。你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所以返回 0,1 由於元素不能重複利用,所以使用j i 1,通過雙迴圈,...
1 兩數之和
你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。public int twosum int nums,int target throw new illegalargumentexception no two sum solution 這樣的時間複雜度為0 nlogn 但是通過檢視官方的...