题目:
Given an array of integers nums
sorted in ascending order, find the starting and ending position of a given target
value.Your algorithm's runtime complexity must be in the order of O(log n).If the target is not found in the array, return [-1, -1]
.
Example 1:
Input: nums = [5,7,7,8,8,10]
, target = 8
Output: [3,4]
Example 2:
Input: nums = [5,7,7,8,8,10]
, target = 6
Output: [-1,-1]
public class SearchRange {
public static int[] searchRange(int[] nums, int target) {
//定义返值
int[] range = {-1, -1};
//处理特殊情况:数组为null,数组为空
if(nums == null || nums.length == 0)
return range;
//处理业务逻辑
int l = 0;
int r = nums.length - 1;
while(l <= r ){
int mid = l + (r - l >> 1);
if(target > nums[mid])
l = mid + 1;
else if(target < nums[mid])
r = mid - 1;
//找到目标target
//由于是有序数组,相同值只会是一个连续区域,以当前mid位置为出发点,分别向左向右寻找边界,这两个边界就是所求
else{
l = mid;
r = mid;
while(l - 1 >= 0 && nums[l - 1] == target) l--;
while(r + 1 < nums.length && nums[r + 1] == target) r++;
range[0] = l;
range[1] = r;
return range;
}
}
return range;
}
public static void main(String[] args) {
int[] nums = {5,7,7,8,8,10};
int target = 5;
System.out.println(Arrays.toString(searchRange(nums, target)));
}
}