題目:

官網題目連結

最經典的 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] 已經有找過時,就代表這是答案。

PHP 程式碼: