解题思路:
还是折半查找,设置三个指针分别指向数组两边和中间,如果中间的值是要找的值直接返回位置坐标;
如果左指针和右指针重合,说明没有找到这个数,可以分为3个情况:
目标大于最大数时,此时指针right在数组最右位置,返回right的下一个位置;
目标小于最小数时,left指针在0位置,此时返回0;
目标在两个数之间,此时right在left左边,返回right位置的后面一个位置
提交代码:
class Solution {
public int searchInsert(int[] nums, int target) {
if(nums==null||nums.length==0) return -1;
int mid,left=0,right=nums.length-1;
while(left<=right) {
mid=(left+right)/2;
if(nums[mid]<target) left=mid+1;
else if(nums[mid]>target) right=mid-1;
else return mid;
}
//如果target小于最小数,left=0
//如果target大于最大数,right在最右
//target加在right、left之间(这时候left=right+1)
if(left==0) return 0;
else if(right==nums.length-1) return nums.length;
else if(target>nums[right]) return right+1;
else return right;
}
}
运行结果:

本文详细解析了折半查找算法的实现过程,包括如何通过设置三个指针来定位目标值,以及在未找到目标值时如何确定插入位置的策略。通过具体代码示例,展示了在不同情况下返回正确插入位置的方法。
1113

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



