给出的数组是有序数组,都可以想一想是否可以使用二分法
左闭右开
目录
左闭右开
class Solution {
public int searchInsert(int[] nums, int target) {
int i=0,j=nums.length;
while(i<j){
int m=(i+j)>>>1;
if(nums[m]>target){
j=m;
}else if(target>nums[m]){
i=m+1;
}else {
return m;
}
}
return j;
// 分别处理如下四种情况
// 目标值在数组所有元素之前 [0,0)
// 目标值等于数组中某一个元素 return middle
// 目标值插入数组中的位置 [left, right) ,return right 即可
// 目标值在数组所有元素之后的情况 [left, right),因为是右开区间,所以 return right
}
};
左闭右闭
class Solution {
public int searchInsert(int[] nums, int target) {
int i=0,j=nums.length-1;
while(i<=j){
int m=(i+j)>>>1;
if(nums[m]>target){
j=m-1;
}else if(target>nums[m]){
i=m+1;
}else {
return m;
}
}
return j+1;
// 分别处理如下四种情况
// 目标值在数组所有元素之前 [0, -1]
// 目标值等于数组中某一个元素 return middle;
// 目标值插入数组中的位置 [left, right],return right + 1
// 目标值在数组所有元素之后的情况 [left, right], 因为是右闭区间,所以 return right + 1
}
};