61. 搜索区间

给定一个包含 n 个整数的排序数组,找出给定目标值 target的起始和结束位置。

如果目标值不在数组中,则返回[-1, -1]

样例

给出[5, 7, 7, 8, 8, 10]和目标值target=8,

返回[3, 4]

挑战 

时间复杂度 O(log n)

应该要第一时间反应到二分,就算没有想到看到这个时间复杂度也要想到了

总体思路就是用二分找到target再前后搜索下就行了

 1 vector<int> searchRange(vector<int> &A, int target) {
 2         // write your code here
 3         vector<int> res;
 4         if(A.empty() ||target < A[0] || target > A[A.size() - 1]){ 
 5             res.push_back(-1);
 6             res.push_back(-1);
 7             return res;  
 8         }  
 9         
10         int low=0,high=A.size();
11         int mid;
12         int start,end;
13         while(low<=high){
14             mid=low+(high-low)/2;
15             if(A[mid]==target){
16                 start=mid-1;
17                 end=mid+1;
18                 while (end < A.size() && A[end] == target) {
19                     end++;
20                 }
21                 while (start >= 0 && A[start] == target ) {
22                     start--; 
23                 }
24                 res.push_back(start + 1);
25                 res.push_back(end - 1);
26                 return res;
27             }
28             
29             if(A[mid]>target){
30                 high=mid-1;
31             }
32             else{
33                 low=mid+1;
34             }
35         }
36         res.push_back(-1);
37         res.push_back(-1);
38         return res; 
39     }
原文地址:https://www.cnblogs.com/TheLaughingMan/p/8301439.html