vector<
int>
twosum
(vector<
int>
& nums,
int target);}
//map[nums[i]] = i;
map.
emplace
(nums[i]
, i);}
return
;}
拓展:hash table
1、why hashtable?
查詢時,關鍵字的比較運算是主要的效能消耗,為了避免比較,通過key-value建立對映,實現快速查詢,這就是hashtable。
2、how?
通過hash()函式計算key值,實現對映,並儲存在一段連續的空間中。
3、衝突解決
開放定址法:線性探測再雜湊(1,2,3…)、二次探測再雜湊(1^2, -1^2)、偽隨機探測再雜湊
鏈位址法:衝突時,在對應key的鍊錶中頭部插入新節點
公共溢位區法:所有衝突元素放在一塊公共區域儲存。
4、時間複雜度
最好o(1),最差為o(n)(所有元素衝突,則需要查詢所有鍊錶節點)
具體參考:我的筆記-hash表
LeetCode No 1 兩數之和
給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9...
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...