LeetCode刷題之路 1 兩數之和

2022-06-05 20:36:08 字數 1494 閱讀 3399

最近要開始刷題了,打算每天要刷一兩道演算法題,對於一些難的演算法知識點要及時搞懂;然後按時參加leetcode的周賽和雙周賽。立此部落格為證,作為監督。

給定乙個整數陣列 nums 和乙個整數目標值 target,請你在該陣列中找出 和為目標值 的那 兩個 整數,並返回它們的陣列下標。

你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。

你可以按任意順序返回答案。

示例 1:

輸入:nums = [2,7,11,15], target = 9

輸出:[0,1]

解釋:因為 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

示例 2:

輸入:nums = [3,2,4], target = 6

輸出:[1,2]

示例 3:

輸入:nums = [3,3], target = 6

輸出:[0,1]

2 <= nums.length <= 103

-109 <= nums[i] <= 109

-109 <= target <= 109

只會存在乙個有效答案

這個題目大多數人看一眼就能想出思路,即對陣列進行兩次遍歷,然後每次迴圈挑出乙個元素,組成乙個元素對。只要判斷此元素對是不是等於target即可。

該思路的**如下:

vectortwosum(vector& nums, int target) ;}}

return {};

}

減少執行時間的小竅門:nums.size()單獨設定成乙個length變數作為迴圈結束條件,不要直接使用nums.size()作為條件。這點是在編譯原理課程中學到的。

上述思路顯然是相當簡單的,提交後也能正確。但是顯然它不是最優解法,時間複雜度還可以進行優化。想到這裡,我們可以用空間來換取時間,即使用乙個map結構,將每個元素作為key,元素位置作為value存入map中,這樣可以將兩層迴圈變為一層迴圈,從而降低時間複雜度。

該思路的**如下:

vectortwosum(vector& nums, int target) ;

}m[nums[i]] = i;

}return {};

}

在這裡為什麼要使用stl庫中的unordered_map而不用map呢,是因為unordered_map更加快,具體原因打算再寫一篇博文,有興趣的同學可以自行查詢相關資料。

總體來說,第一題還是相當簡單的,並沒有用到什麼複雜的演算法知識,而且第一題我之前還做過。。。

希望後面能堅持刷題,至少每天一道。以後這種水題也就不寫部落格了,太浪費時間。

希望此**能給大家帶來收穫,謝謝大家!

堅持不懈地努力才能成為大神!

leetcode刷題之路1 兩數之和

題目 給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 因為 nums 0 nums 1 2...

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 ...