给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n)
的算法。
示例 1:
输入: nums = [1,3,5,6], target = 5
输出: 2
示例 2:
输入: nums = [1,3,5,6], target = 2
输出: 1
示例 3:
输入: nums = [1,3,5,6], target = 7
输出: 4
提示:
1 <= nums.length <= 104
-104 <= nums[i] <= 104
nums
为 无重复元素 的 升序 排列数组-104 <= target <= 104
public int searchInsert(int[] nums, int target) {
int mini = 0; // 最小索引
int maxi = nums.length - 1; // 最大索引
while (mini <= maxi) {
int hai = (maxi + mini) / 2; // 中间索引
if (nums[hai] == target) {
// 如果中间元素等于目标值,直接返回中间索引
return hai;
} else if (target > nums[hai]) {
// 如果目标值大于中间元素,在右半部分继续搜索
mini = hai + 1; // 更新最小索引
} else {
// 如果目标值小于中间元素,在左半部分继续搜索
maxi = hai - 1; // 更新最大索引
}
}
// 循环结束时,插入位置为最小索引所在的位置
return mini;
}
标签:mini,target,索引,int,nums,力扣,插入,搜索,目标值
From: https://blog.51cto.com/u_16199760/7120626