题目:
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))); } }
