给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为
O(log n)
的算法。
解析:以示例2来举例,left = 0,right = 3,mid = 1
第一轮:nums[mid] > target(3>2),left = 0, right = 2,mid = 1
第二轮:nums[mid] > target(3>2),left = 0,right = 1,mid = 0
第三轮:nums[mid] < target (1<2) ,left = 1,right = 1.mid = 1
第四轮:nums[mid] > target (3>2) ,left = 1,right = 0,此时right > left,退出循环,
target在索引left的位置,或者right+1的位置
代码:
public int searchInsert(int[] nums, int target) {int left = 0, right = nums.length - 1;while(left <= right){int mid = left + (right - left) / 2;if(nums[mid] == target){return mid;}else if(nums[mid] < target){left = mid + 1;}else{right = mid - 1;}}return left;}