做宣传海报的网站,网站开发做什么科目,没有网站怎么做网络推广,自己做网站赚钱案例解题思路:
左边界查找:
初始化指针和开始位置 left、right、start。在 left < right 的条件下循环:计算中间索引 mid,避免整数溢出(mid left (right - left) / 2)。若中间元素等于目标值&#x…
解题思路:
左边界查找:
初始化指针和开始位置 left、right、start。在 left <= right 的条件下循环:
计算中间索引 mid,避免整数溢出(mid = left + (right - left) / 2)。
若中间元素等于目标值,记录当前位置并继续向左半部分搜索。
若中间元素小于目标值,说明目标值在右半部分,更新 left = mid + 1。
若中间元素大于目标值,说明目标值在左半部分,更新 right = mid - 1。
右边界查找:
初始化指针和结束位置 left、right、end。在 left <= right 的条件下循环:
计算中间索引 mid,避免整数溢出(mid = left + (right - left) / 2)。
若中间元素等于目标值,记录当前位置并继续向右半部分搜索。
若中间元素小于目标值,说明目标值在右半部分,更新 left = mid + 1。
若中间元素大于目标值,说明目标值在左半部分,更新 right = mid - 1。
Java代码:
classSolution{publicint[]searchRange(int[] nums,int target){int start =binarySearchLeft(nums, target);if(start ==-1)returnnewint[]{-1,-1};int end =binarySearchRight(nums, target);returnnewint[]{start, end};}privateintbinarySearchLeft(int[] nums,int target){int left =0;int right = nums.length -1;int start =-1;while(left <= right){int mid = left +(right - left)/2;if(nums[mid]== target){start = mid;right = mid -1;}elseif(nums[mid]< target){left = mid +1;}else{right = mid -1;}}return start;}privateintbinarySearchRight(int[] nums,int target){int left =0;int right = nums.length -1;int end =-1;while(left <= right){int mid = left +(right - left)/2;if(nums[mid]== target){end = mid;left = mid +1;}elseif(nums[mid]< target){left = mid +1;}else{right = mid -1;}}return end;}}