Given a sorted array of distinct integers and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order.
You must write an algorithm with
O(log n) runtime complexity.
Input: nums = [1,3,5,6], target = 5 Output: 2
Input: nums = [1,3,5,6], target = 2 Output: 1
Input: nums = [1,3,5,6], target = 7 Output: 4
1 <= nums.length <= 104
-104 <= nums[i] <= 104
numscontains distinct values sorted in ascending order.
-104 <= target <= 104
class Solution(object): def searchInsert(self, nums, target): """ :type nums: List[int] :type target: int :rtype: int """ # the input target might be larger than all elements in nums and therefore needs to placed at the end of the array. That's why we should initialize right = len(nums) instead of right = len(nums) - 1. left, right = 0, len(nums) # Left and right depends on the question. It could be [0, n] or [1, n] while left < right: # We do left < right here for a generalised form, we might want an <= depending on the question. Will talk morea bout it later mid = left + (right - left) // 2 if nums[mid] >= target: right = mid else: left = mid + 1 return left