双指针!!!但是要变形一下。
public static int searchInsert(int[] nums, int target) {
int right = nums.length-1;
int left = 0;
int ans = nums.length;
// if (target<nums[0]){
// return 0;
// }
// if (target>nums[right]){
// return right+1;
// }
// while (right>=left){
// int mid = left+(right-left)/2;
// if(nums[mid-1]<target && target<=nums[mid]){
//这个地方报错,如果mid=0.
// return mid;
// }
// if(nums[mid]>target){
// right=mid-1;
// }
// if(nums[mid]<target){
// left=mid+1;
// }
// }
while (right>=left){
int mid = left+(right-left)/2;
if(target<=nums[mid]){
right=mid-1;
ans=mid;
}
if(nums[mid]<target){
left=mid+1;
}
}
return ans;
}
注释掉的是刚开始写的辣鸡代码!!!会超出阈值!!记得总结合并!!!
不用急着return,可以先把ans存着,要考虑多种情况,比如nums数组为空,或者只有一个数的时候。
哎,官方的答案总是又精简又把所有情况都包含了,为什么我就想不到,写到稀里糊涂
加油!!!!要记得分析问题!!!既然要插值,就要考虑在什么范围插,那就是小于等于nums[mid],大于nums[mid-1],那就要考虑超出的问题,那就换种思路,先把小于等于的mid存起来,我用大于nums[mid],直到两个指针相等!