题目:
给定一个排序的整数数组 nums 和一个整数目标值 target ,请在数组中找到 target ,并返回其下标。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。
示例 :
输入: nums = [1,3,5,6], target = 5 输出: 2
思路:
主要思路是二分查找,掌握二分查找模板。
关键一步是没有这个值时怎么处理。
分为三种情况:
1.target最小,插到最前面
2.target在中间
3.target最大,插到最后面
具体的实现过程和思路见代码以及其中注释。
代码:
public int searchInsert(int[] nums, int target) {
//二分法
int left = 0;
int right = nums.length-1;
while(left<=right){
int mid=left+((right-left) >> 1);//避免溢出
if(nums[mid]>=target){
if(mid==0||nums[mid-1]<target){//nums[mid-1]<target这句判断是核心,好好体会
return mid;
}
right = mid-1;
}
else {
left =mid+1;
}
}
return nums.length;//是target最大的情况
}
该博客讨论了一种使用二分查找算法在已排序整数数组中寻找目标值下标的高效方法。在O(logn)的时间复杂度内,代码实现了当目标值存在时返回其下标,不存在时给出插入位置的功能。核心判断条件是nums[mid-1] < target,以确定插入位置。
176

被折叠的 条评论
为什么被折叠?



