解题思路:
还是折半查找,设置三个指针分别指向数组两边和中间,如果中间的值是要找的值直接返回位置坐标;
如果左指针和右指针重合,说明没有找到这个数,可以分为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;
}
}
运行结果: