渭南网站建设网站排名优化,官方网站建设计划书,合肥 网站建设,延庆网站建设给你一个按照非递减顺序排列的整数数组 nums#xff0c;和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target#xff0c;返回 [-1, -1]。 你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。 代码#xff1a;
c… 给你一个按照非递减顺序排列的整数数组 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;}}