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