搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。
思路
/**
*
* 题意:要求在log n 的时间复杂度下完成
* 则使用二分的方法满足这个条件
* 题意:相当于在数组中查找这个数,如果存在则直接返回下标,如果不存在则找到第一个比它大的数
* 则满足 nums[mid] >= target
* 如果数组所有的元素都比查找的元素小,则这个元素的位置应该在 nums.length 的位置
* 二分的右界设置为nums.length 位置而不是 -1 的位置。
*
*二分查找完直接返回 r 即可。因为最后循环 l位置会更新到r位置 所以返回 l 也行。
* 时间复杂度0(log n)
* 空间复杂度o(1) 没有使用额外空间
*
* */
代码
public static int searchInsert(int[] nums, int target) {
int l = 0;
int r = nums.length;
while (l < r) {
int mid = l + (r - l) / 2 ; //
if (nums[mid] >= target) {
r = mid;
} else {
l = mid + 1;
}
}
return r;
}