18搜索插入位置
题目描述:
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。
思路:
上一篇中提到的蓝红边界法的最好实践,方法详细看上一篇笔记,且不需要考虑添加在最后面最前面之类的问题,直接找到小于target的最后一个数,返回它的下标加一即可。
代码:
public static int searchInsert(int[] nums, int target) {
int l = -1;
int r = nums.length;
while (l + 1 != r) {
int mid = (l + r) / 2;
if (nums[mid] < target) l = mid;
else r = mid;
}
return l + 1;
}