1.在排序数组中查找元素的第一个和最后一个位置
leetcode34题
常规解法:for循环遍历有序序列,使用两个变量标记第一个数的位置和最后一个数位置。时间复杂度为O(n)。
进阶解法:使用二分搜索法搜索左右边界,时间复杂度O(logn)。
搜索左边界的方法:
1. 首先与正常二分搜索法一样,找到序列中与目标值相同的值;
2. 正常的二分搜索找到正常的值时退出循环即可,而搜索左边界不退出循环,令搜索区间的right等于该目标值的索引减1,收缩右侧边界。换句话来说是依次搜索目标值左侧区间中是否有与目标值相等的数;
3. 搜索右边界同理。
```Java
public static int leftBound(int[] nums, int target) {
//当有序序列为空时
if(nums.length==0){
return -1;
}
int left = 0;//定义左边界
int right = nums.length - 1;//定义右边界
while (left <= right) {
int mid = left + (right - left) / 2;
//搜索区间[left,mid-1]
if (nums[mid] > target) {
right = mid - 1;
}