题目描述:
思路想法:
无疑是利用二分查找了,但是,当一个不存在数组中的元素,应该如何确定它在数组中的位置呢?
二分法在跳出循环时,说明这个元素没有在数组当中,但是,在跳出来之前,left和right即为相邻的元素;
当用target目标元素和mid比较的时候,target比中间的大应该选没跳出循环时的右边,否则选左边作为插入位置。
Java 代码:
class Solution {
public int searchInsert(int[] nums, int target) {
int tempL = 0;
int tempR = 0;
int right=nums.length;
// 长度为1 的特殊情况
if(right == 1){
if(nums[0]>=target){return 0;}
else{return 1;}
}
int left = 0;
int mid = 0;
boolean flag = false;
// 可以用二分法解决的
while(left<right){
tempR=right;
tempL=left;
mid = (left+right)/2;
if(target>nums[mid]){
left = mid+1;
flag = true;
}else if(target==nums[mid]){return mid;}
else{
right = mid;
flag=false;
}
}
if(flag){return right;
}else{
return left;}
}
}
核心技能:
二分查找的精妙之处需要理解透彻。