35. 搜索插入位置
描述
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。
分析
典型的二分查找的题目,附加任务:若找不到该元素,则查找该元素,应该所属的位置,并返回对应下标。
解法(使用左闭右闭的形式)
- 初始化left=0,right=array.length-1,寻找数组中值为target的元素,并返回下标
- 循环逻辑
若a[mid]==target ,return mid.
若a[mid]<target,说明应该去mid的左区间寻找,故right=mid-1.
若a[mid]>target,说明应该去mid的右区间寻找,故left=mid+1
3.若过程中找到target,直接返回index即可;若没有,退出循环后,left的取值就是target的所属index,最后直接返回left即可。
###代码
class Solution {
public int searchInsert(int[] nums, int target) {
int left=0;
int right=nums.length-1;
int mid;
while(left<=right){
mid=(left+right)/2;
if(nums[mid]==target){
return mid;
}
if(nums[mid]>target){
right=mid-1;
}else {
left=mid+1;
}
}
return left;
}
}
总结:
题目虽简,平常对待。