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 }

思路:二分查找分别找 左边界和右边界。

posted on 2022-04-18 23:43  阿ming  阅读(17)  评论(0编辑  收藏  举报

导航