给定一个包含 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 }