给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。
你的算法时间复杂度必须是 O(log n) 级别。
如果数组中不存在目标值,返回 [-1, -1]。
示例 1:
输入: nums = [5,7,7,8,8,10], target = 8
输出: [3,4]
示例 2:
输入: nums = [5,7,7,8,8,10], target = 6
输出: [-1,-1]
题解:
package array; public class L34 { public static int[] searchRange(int[] nums, int target) { int index = searchIndex(nums,target,0,nums.length-1); int lowIndex = index,highIndex = index; if(lowIndex == -1 && highIndex == -1){ return new int[]{lowIndex,highIndex}; } while(lowIndex >= 0 && nums[lowIndex] == target){ lowIndex --; } lowIndex++; while(highIndex<nums.length && nums[highIndex] == target){ highIndex ++; } highIndex--; return new int[]{lowIndex,highIndex}; } public static int searchIndex(int[] nums, int target,int start,int end){ while(start <= end){ if(nums[(start+end)/2] == target){ return (start+end)/2; }else if(nums[(start+end)/2] > target){ end = (start+end)/2-1; return searchIndex(nums, target,start,end); }else { start = (start+end)/2+1; return searchIndex(nums, target,start,end); } } return -1; } public static void main(String[] args) { int[] nums = {1}; int[] returnNums = searchRange(nums,1); System.out.println(returnNums[0]+" " +returnNums[1]); } }