给你一个按照非递减顺序排列的整数数组
nums
,和一个目标值target
。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值
target
,返回[-1, -1]
。你必须设计并实现时间复杂度为
O(log n)
的算法解决此问题。
代码:
class Solution{public int[] searchRange(int[] nums, int target) {int left = search(nums,taget,true);// 查找目标值的左边界int right = search(nums,target,false);// 查找目标值的右边界return new int[]{left,right}; // 返回左右边界组成的数组}private int search(int[] nums, int target, boolean flag){int left = 0, right = nums.length - 1;int result = -1;// 结果初始化为-1,表示未找到目标值while(left <= right){int mid = left + (right - left) / 2;if(nums[mid] == target) {result = target;if(flag){//查找左边界right = mid - 1;/ 缩小右边界}else{ //查找右边界left = mid + 1;/ 缩小左边界}}else if(nums[mid] < target) {// 目标值在右半部分left = mid + 1; // 缩小左边界}else{right = mid - 1;// 缩小右边界}}return result;}}