34. Search for a Range
思路:
首先二分查找找到目标数字,然后左右开始分开扫,注意这个时候的边界处理问题就行了。
一些细节:
标记首尾时使用-1,array.length来进行标记,即标记数组开始前一个和结束后一个。
class Solution { public int[] searchRange(int[] nums, int target) { if(nums.length == 0) return new int[]{-1,-1}; int low = 0; int high = nums.length - 1; int find = -1; while(low <= high) { int mid = (low + high) / 2; if(target == nums[mid]) { find = mid; break; } else if(target < nums[mid]) high = mid -1; else low = mid + 1; } if(find == -1) return new int[]{-1,-1}; else { int start = find - 1; int end = find + 1; while(start > -1 && nums[start] == nums[find]) start--; while(end < nums.length && nums[end] == nums[find]) end++; return new int[]{start+1,end -1}; } } }