//分别找最左边和最右边 class Solution { public int[] searchRange(int[] nums, int target){ if (nums.length == 0) return new int[]{-1, -1}; int left = searchLeft(nums, target); int[] res = new int[2]; if (left == -1){ res[0] = -1; res[1] = -1; return res; } int right = searchRight(nums, target); if (left < right){ res[0] = left; res[1] = right; }else { res[0] = right; res[1] = left; } return res; } public int searchLeft(int[] nums, int target){ int left = 0; int right = nums.length; int mid = 0; while (left < right - 1){ // 左闭右开 // System.out.println(left + " " + right); mid = (left + right) / 2; if (target > nums[mid]) left = mid + 1; else if (target == nums[mid]) left = mid; else right = mid; } if (left < nums.length && nums[left] == target) return left; return -1; } public int searchRight(int[] nums, int target){ int left = -1; int right = nums.length - 1; int mid = 0; while(left + 1 < right){ // 左开右闭 // System.out.println(left + " " + right); mid = (left + right) / 2; if (target < nums[mid]) right = mid - 1; else if (target == nums[mid]) right = mid; else left = mid; } if (right >= 0 && nums[right] == target) return right; return -1; } }
文章来源: https://blog.csdn.net/TIMELIMITE/article/details/89786071