給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。
你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。
示例:
給定 nums = [2, 7, 11, 15], target = 9
因為 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
時間複雜度:o(n^2)
空間複雜度:o(1)
//方法一:窮舉法:
class
solution;}
}return;}
};
注意點:
(1)返回值可以是以的方式返回vector,比vector.push_back()寫法簡潔。
(2)返回區域性變數:函式是可以返回區域性變數的,區域性變數的作用域只在函式內部,區域性變數的記憶體已經釋放了。因此,如果函式返回的是區域性變數的值,不涉及位址,程式不會出錯。但是如果返回的是區域性變數的位址(指標)的話,程式執行後會出錯。因為函式只是把指標複製後返回了,但是指標指向的內容已經被釋放了,這樣指標指向的內容就是不可預料的內容,呼叫就會出錯(返回指向堆記憶體的指標是可以的)。
時間複雜度:o(n)
空間複雜度:o(n)
//方法二:兩邊雜湊表:
class
solution;}
return;}
};
時間複雜度:o(n)
空間複雜度:o(n)
//方法三:一遍雜湊表:
class
solution;}
return;}
};
注意點:
(1)從兩遍雜湊表到一遍雜湊表,迴圈次數的優化的關鍵點在於,一次迴圈往往可以做更多的事,比如這個例子中在一遍for迴圈中除了向map中插入元素,還可以同時檢查之前的值是否存在。
注意此題不能使用「排序+雙指標」的方法求解,因為排序會導致陣列中元素的下標位置改變,而返回值需要原始的下標。
LeetCode No 1兩數之和
vector int twosum vector int nums,int target map nums i i map.emplace nums i i return 拓展 hash table 1 why hashtable?查詢時,關鍵字的比較運算是主要的效能消耗,為了避免比較,通過key ...
LeetCode No 1 兩數之和
題解一 很簡單,直接暴力解法,兩層for迴圈,不多說 題解二 官方解法 因為是找兩數之和為target,且只會有乙個解 要在o n平方 上優化,顯然想到迴圈一次就得找到解 又恰好是兩數,則可以利用hashmap的key和value,把陣列值作為鍵,陣列鍵作為value 邊迴圈邊判斷key中是否存在t...
1 兩數之和
給定乙個整數陣列和乙個目標值,找出陣列中和為目標值的兩個數。你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所以返回 0,1 解class solution hash nums i...