题目
解题思路
- 对数组只存在一个元素的特殊情况进行单独判断;
- 设置变量控制左右边界,通过取中间值比较大小来缩小范围,避免遍历数组所有值;
代码展示
class Solution {
public int searchInsert(int[] nums, int target) {
if(nums.length == 1){
if(nums[0] == target){
return 0;
} else if (nums[0] < target){
return 1;
} else {
return 0;
}
}
int left = 0;
int right = nums.length - 1;
int middle = 0;
while (left < right){
if(left + 1 == right){
if(nums[left] == target){
return left;
} else if(nums[right] < target){
return right + 1;
} else if (nums[left] > target) {
return Math.max(0, left - 1);
} else {
return right;
}
} else {
middle = (left + right) / 2;
if(nums[middle] == target){
return middle;
} else if (nums[middle] > target){
right = middle;
} else {
left = middle;
}
}
}
return middle + 1;
}
}