在排序数组中查找元素的第一个和最后一个位置
34. 在排序数组中查找元素的第一个和最后一个位置
给定一个按照升序排列的整数数组 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]
1 public class T34 { 2 3 public int[] searchRange(int[] nums, int target){ 4 int l = 0, r = nums.length - 1; 5 //找到target第一次出现的位置,和target+1第一次出现的位置 6 int idx_target = getIndex(nums, target); 7 int idx_target2 = getIndex(nums, target + 1) - 1; 8 if (idx_target == nums.length || nums[idx_target] != target) { 9 return new int[]{-1, -1}; 10 } else { 11 return new int[]{idx_target,idx_target2}; 12 } 13 } 14 15 private int getIndex(int[] nums, int target) { 16 int l = 0, r = nums.length; 17 while (l < r) { 18 int mid = (r - l) / 2 + l; 19 if (target <= nums[mid]) { 20 r = mid; 21 } else { 22 l = mid + 1; 23 } 24 } 25 return l; 26 } 27 }
一回生,二回熟