トピック
ソートされた配列とターゲット値を指定すると、配列内でターゲット値を検索し、そのインデックスを返します。ターゲット値が配列内に存在しない場合は、その値が順番に挿入される位置を返します。
時間計算量がO(log n)のアルゴリズムを使用してください。
例 1:
输入: nums = [1,3,5,6], target = 5
输出: 2
例 2:
输入: nums = [1,3,5,6], target = 2
输出: 1
例 3:
输入: nums = [1,3,5,6], target = 7
输出: 4
答え:
要件により、時間計算量がO(log n)のアルゴリズムを使用してください。
質問の要件に従って、当然のことながら二項対立を考えます。
class Solution:
def searchInsert(self, nums: List[int], target: int) -> int:
left, right = 0, len(nums) - 1
# 注意这里的 right = len(nums) - 1
while left <= right :
middle = (left + right) // 2
if nums[middle] == target: return middle
if nums[middle] > target: right = middle - 1
if nums[middle] < target: left = middle + 1
# 这里的3个if可以写成一个if
return right + 1
# 注意这里返回的是 right + 1 因为找不到目标时需要嵌入
# 并返回嵌入位置,所以嵌入的是二分法结束后right的右边一个位置