1、题目描述
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n)
的算法。
2、算法思路
使用二分查找,其实最后是寻找m的位置,然后在判断是返回数组的现在下标还是右边。
3、算法代码
class Solution {
public int searchInsert(int[] nums, int target) {
int left=0,right=nums.length-1;
int m = 0;
while(left<=right){
m = (left + right) >>> 1;
if(nums[m] < target){
//查找范围[m+1,right]
left = m+1;
}else if(target < nums[m]){
//查找范围是[left,m-1]
right = m -1;
}else{
//nums[m]==targer
return m;
}
}
//最后判断应该返回那个位置
if(nums[m] < target){
m = m+1;
}else {
m = m;
}
return m;
}
}