1 #include<iostream>
2 #include<vector>
3 using namespace std;
4 vector<int> ersearch(vector<int>& nums, int target, int left, int right)
5 {
6 vector<int>result;
7 while (left <= right) {
8 int middle = left + ((right - left) / 2);
9 if (nums[middle] > target) {
10 right = middle - 1;
11 }
12 else if (nums[middle] < target) {
13 left = middle + 1;
14 }
15 else {
16 //这里找到其中一个元素 但是他不一定是最后一个或者是第一个
17 //备份一下
18 int backups = middle;
19 //判断一下他的上一个是target?如果是则更新 这样就能找到最小
20 while (middle != 0 && nums[middle] == nums[middle - 1]) {
21 middle--;
22 }
23 //放入最小
24 result.push_back(middle);
25 //判断一下他的下一个是target?如果是则更新 这样就能找到最大
26 while (backups != nums.size()-1 && nums[backups] == nums[backups + 1]) {
27 backups++;
28 }
29 //放入最大
30 result.push_back(backups);
31 return result;
32 }
33 }
34 //如果没有 就返回-1 -1
35 return {-1,-1 };
36 }
37
38 class Solution {
39 public:
40 vector<int> searchRange(vector<int>& nums, int target) {
41 //调用二分搜索
42 return ersearch(nums, target, 0, nums.size()-1);
43 }
44 };
45
46
47 int main() {
48 Solution sol;
49 vector<int> nums = { 5,7,7,8,8,10 };
50 int target = 5;
51 vector<int> result=sol.searchRange(nums, target);
52 for (int i = 0; i < result.size();i++) {
53 cout << result[i] << endl;;
54 }
55 }