敘述
這是 Algorithm I
的第一天第三個題目,總共有三題。
- 難度:
Easy
- 花費時間: 1hr
- 題目
傳入一個陣列包含由小到大排序好的不重複數字,和一個目標,如果目標在陣列中,回傳目標的 index ,如果不在,回傳目標應該要插入的 index 。
點我開啟限制與範例
限制:
1 <= nums.length <= 104
-104 <= nums[i] <= 104
nums
contains distinct values sorted in ascending order.-104 <= target <= 104
Example 1:
1 | Input: nums = [1,3,5,6], target = 5 |
Example 2:
1 | Input: nums = [1,3,5,6], target = 2 |
Example 3:
1 | Input: nums = [1,3,5,6], target = 7 |
筆記
運用 Binary Search 即可:
- 設定左邊(left)為 0 ,右邊(right)為 nums.length - 1 。
- 只要 right > left 就繼續找。
- 算出中點(middle) = (right + left) / 2
- 比較 nums[mid] 跟 target:
- nums[mid] < target: 把左邊移到中間 + 1
- nums[mid] > target: 把右邊移到中間
- nums[mid] = target: 回傳 mid
- 比較 nums[right] < target: 回傳 right + 1
- 因為如果 target 不存在在陣列,那麼要回傳他應該插入哪,
- 若最後的 target 比 nums[right] 大,那他應該插在 right 後面,所以要 + 1
- 若沒有 他應該插在 right 的位置,(不用做判斷,會被第 6 步接住。)
- 回傳 right
程式碼
1 | /** |