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]
class Solution {
public int[]searchRange(int[] nums,int target){int[] res = new int[2];
res[0]=searchLeft(nums, target);
res[1]=searchRight(nums, target);return res;}
public intsearchLeft(int[] nums,int target){int left =0, right = nums.length -1;while(left <= right){int mid = left +(right - left)/2;if(nums[mid]> target){
right = mid -1;}elseif(nums[mid]< target){
left = mid +1;}//进一步缩小搜索区间elseif(nums[mid]== target){
right = mid -1;}}// 最后要检查 left 越界的情况if(left <= nums.length -1&& nums[left]== target){return left;}else{return-1;}}
public intsearchRight(int[] nums,int target){int left =0, right = nums.length -1;while(left <= right){int mid = left +(right - left)/2;if(nums[mid]> target){
right = mid -1;}elseif(nums[mid]< target){
left = mid +1;}//向右缩小区间elseif(nums[mid]== target){
left = mid +1;}}if(right >=0&& nums[right]== target){return right;}else{return-1;}}}