LeetCode 1. Two Sum
題目:
最經典的 LeetCode 第一題,求兩數之和!
根據題目敘述,會給定一個整數陣列 nums,還有一個整數 target,你必須找出 nums 中哪兩個元素相加會等於 target,用陣列回傳他們的索引。
例如輸入 nums=[2, 7, 11, 15], target=9,由於前兩個元素 2+7=9 剛好就是答案,所以回傳 [0 ,1],題目特別說不看順序所以你要回傳 [1, 0] 也可以。
- 2 <= nums.length <= 10^4
- -10^9 <= nums[i] <= 10^9
- -10^9 <= target <= 10^9
解法:
沒碰過演算法的人可能一開始都會想到用暴力解,也就是先用第 1 個去對剩下 N-1,再用第 2 個去對剩下 N-2 個,但這樣的做法會導致運算次數變成等差數列總和,也就是時間複雜度 O(N^2)。
我們可以花一點空間來換時間,也就是用另一個陣列來邊找邊記錄我們已找過的值,當發現 target - nums[i] 已經有找過時,就代表這是答案。
- 時間複雜度 O(N),如何證明檢查存在鍵與拿取存放的時間複雜度請 參考我的另一篇文章 - PHP Array
- 空間複雜度 O(N)
PHP 程式碼:
如果您喜歡我的文章,歡迎幫我在下面按5下讚!感謝您的鼓勵和支持!
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment