leetcode 之搜索插入位置
思路
见代码注释
代码
public int searchInsert(int[] nums, int target) {
/*
二分查找
跳出条件
1.找到了
2. 确认没找到
end-start<=1
=0 肯定没找到了
=1 情况,可能 num[start] nums[end] =target
*/
int start=0;
int end=nums.length-1;
//单独剔除 target一定不在数组内的情况
if(target<nums[start]){
return 0;
}
if(target>nums[end]){
return end+1;
}
int middle=(start+end)/2;
while(end-start>1){
if(nums[middle]>target){
end=middle;
}else if(nums[middle]<target){
start=middle;
}else{
return middle;
}
middle=(end+start)/2;
}
//循环结束,最后一次,有可能考虑漏掉 start end 位 也可以 ==target
if(nums[start]==target){
return start;
}
if(nums[end]==target){
return end;
}
//前后都不等 ,中间也不等,肯定在middle 前或者后了
return nums[middle]>target?middle-1:middle+1;
}
提交结果
碰到的问题
- 测试用例 [1,3,4,5,6] 7
边界情况没考虑到,单例考虑传入的数组不在有序数组范围内 - 测试用例[1,3] 2
初始化 middle=nums.length/2 导致结果不准确
修改位 middle=(end+start)/2