原题链接 : 搜索插入位置
名副其实的简单题, 不像昨天的第28题,披着简单题的外衣, 其实是想让我学习KMP 😃 .
题目要求搜索给定值在数组中的位置,从第一个例子 : 1,3,5,6 目标值5, 输出2 可以看出, 如果有相同的, 需要插入左边, 又要求使用O(logn)时间复杂度的算法, 这就差直接说使用二分查找了吧…
二分查找不用多说啦, 直接上参考代码 :
// 处理几种特殊情况
if (nums == null) return 0;
// 最后的比target小, 直接返回 length
if (nums[nums.length-1]<target) return nums.length;
// 第一个比target大,直接返回 0
if (nums[0]>target) return 0;
// 定义二分查找的left和right
int left = 0 , right = nums.length - 1 ;
// 当左边小于等于右边的时候
while (left <= right){
// 定义mid(防止栈溢出)
int mid = ((right - left)>>1) + left ;
// 相同需要在左边, 所以是小于
if (nums[mid] < target){
left = mid + 1 ;
} else {
right = mid - 1;
}
}
// 返回left即可
return left ;