给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。
leetcode 链接:https://leetcode-cn.com/problems/search-insert-position
搜索插入位置,采用的是二分法的思想。和数组的中间值相比,中间值大于目标值target,则向前查找,等于则返回当前下标,小于则向后查找。终止条件为左右边界相同时。
class Solution {
public int searchInsert(int[] nums, int target) {
int left = 0;
int right = nums.length-1;
while(left <= right){
int mid = left + (right-left)/2; //防止计算溢出
if(nums[mid] == target){
return mid;
}else if(nums[mid] > target){
right = mid - 1; //比mid小,返回mid前
}else{
left = mid + 1; //比mid大,返回mid后
}
}
return left;
}
}