題目:
給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。
你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。
示例:給定 nums = [2, 7, 11, 15], target =
因為 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
陣列至少兩個數值
第一反應是用兩個for迴圈,但是這是最簡單的思想。
然後再細想,可以在相加之前加上判斷,相加的兩個數不可以比target大。目前也就想到這裡。哈哈,這裡想錯了,沒有想到有負數出現的情況,應該是第二個數必須大於target-第乙個數
#include #includeusing
namespace
std;
vector
twosum(vector& nums, int
target)
for (int i = 0; i)
;return
ans;}}
}}
return
ans;
}int
main() ;
vector
ans = twosum(nums, 0
); std::cout
<< ans[0] << ans[1]
}
注:vector 的六種建立和初始化方法
29 / 29 個通過測試用例
執行用時:432 ms
服了。。。。。
向高手們學習:發現他們用了map來提公升速度。
注:關於vector和map查詢效率的驚人的實際測試結果
vector與map表的區別
vector和map的效率簡要比較
stl的map和hashmap比較
map和unordered_map的差別和使用
方法二:
vector twosum(vector& nums, inttarget)
unordered_map
map1;
for (int n = 0; n)
for (int i = 0; i)
;return
ans;}}
return
ans;
}
執行用時:20 ms 舒服
方法三:
避免了判斷是否和自身相同
vector twosum(vector& nums, inttarget)
unordered_map
map1;
for (int i = 0; i);}
return
ans;
}
執行用時:20 ms
這道題複習了vector map hashmap的知識,要記住hashmap map vector的基本用法以及操作,還要區分什麼時間用什麼好
LeetCode刷題之路 1 兩數之和
最近要開始刷題了,打算每天要刷一兩道演算法題,對於一些難的演算法知識點要及時搞懂 然後按時參加leetcode的周賽和雙周賽。立此部落格為證,作為監督。給定乙個整數陣列 nums 和乙個整數目標值 target,請你在該陣列中找出 和為目標值 的那 兩個 整數,並返回它們的陣列下標。你可以假設每種輸...
LeetCode刷題之路 兩數相加
給你兩個 非空 的鍊錶,表示兩個非負的整數。它們每位數字都是按照 逆序 的方式儲存的,並且每個節點只能儲存 一位 數字。請你將兩個數相加,並以相同形式返回乙個表示和的鍊錶。你可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 1 輸入 l1 2,4,3 l2 5,6,4 輸出 7,0,8 ...
LeetCode刷題之路 2 兩數相加
給你兩個 非空 的鍊錶,表示兩個非負的整數。它們每位數字都是按照 逆序 的方式儲存的,並且每個節點只能儲存 一位 數字。請你將兩個數相加,並以相同形式返回乙個表示和的鍊錶。你可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 1 輸入 l1 2,4,3 l2 5,6,4 輸出 7,0,8 ...