2022-4-18 面试高频题
给定一个按照升序排列的整数数组 nums
,和一个目标值 target
。找出给定目标值在数组中的开始位置和结束位置。
如果数组中不存在目标值 target
,返回 [-1, -1]
。
进阶:
- 你可以设计并实现时间复杂度为
O(log n)
的算法解决此问题吗?
1 class Solution { 2 public int[] searchRange(int[] nums, int target) { 3 int l=0,r=nums.length-1; 4 //左边界 5 // 6 boolean flag=false; 7 int left=-1,right=-1; 8 while (l<=r){ 9 int mid=(l+r)/2; 10 if (nums[mid]>target){ 11 r=mid-1; 12 }else if (nums[mid]<target){ 13 l=mid+1; 14 }else { 15 flag=true; 16 r=mid-1; 17 } 18 //System.out.println(l+" "+r); 19 } 20 if (!flag) return new int[]{-1,-1}; 21 left=l; 22 l=0; 23 r=nums.length-1; 24 while (l<=r){ 25 int mid=(l+r)/2; 26 if (nums[mid]>target){ 27 r=mid-1; 28 }else if (nums[mid]<target){ 29 l=mid+1; 30 }else{ 31 l=mid+1; 32 } 33 //System.out.println(l+" "+r); 34 } 35 right=r; 36 return new int[]{left,right}; 37 } 38 }
思路:二分查找分别找 左边界和右边界。