# 在排序数组中查找元素的第一个和最后一个位置

给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。

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

进阶:

 

示例 1:

输入:nums = [5,7,7,8,8,10], target = 8
输出:
[3,4]

示例 2:

输入:nums = [5,7,7,8,8,10], target = 6
输出:
[-1,-1]

示例 3:

输入:nums = [], target = 0
输出:
[-1,-1]

 

提示:

以下程序实现了这一功能,请你填补空白处内容: ```cpp #include using namespace std; class Solution { public: vector searchRange(vector &nums, int target) { vector res; res.push_back(binary_search_begin(nums, target)); res.push_back(binary_search_end(nums, target)); return res; } private: int binary_search_begin(vector nums, int target) { int lo = -1; int hi = nums.size(); while (lo + 1 < hi) { int mid = lo + (hi - lo) / 2; if (target > nums[mid]) { lo = mid; } else { hi = mid; } } if (hi == nums.size() || nums[hi] != target) { return -1; } else { return hi; } } int binary_search_end(vector nums, int target) { int lo = -1; int hi = nums.size(); while (lo + 1 < hi) { int mid = lo + (hi - lo) / 2; ______________; } if (lo == -1 || nums[lo] != target) { return -1; } else { return lo; } } }; ``` ## template ```cpp #include using namespace std; class Solution { public: vector searchRange(vector &nums, int target) { vector res; res.push_back(binary_search_begin(nums, target)); res.push_back(binary_search_end(nums, target)); return res; } private: int binary_search_begin(vector nums, int target) { int lo = -1; int hi = nums.size(); while (lo + 1 < hi) { int mid = lo + (hi - lo) / 2; if (target > nums[mid]) { lo = mid; } else { hi = mid; } } if (hi == nums.size() || nums[hi] != target) { return -1; } else { return hi; } } int binary_search_end(vector nums, int target) { int lo = -1; int hi = nums.size(); while (lo + 1 < hi) { int mid = lo + (hi - lo) / 2; if (target < nums[mid]) { hi = mid; } else { lo = mid; } } if (lo == -1 || nums[lo] != target) { return -1; } else { return lo; } } }; ``` ## 答案 ```cpp if (target < nums[mid]) { hi = mid; } else { lo = mid; } ``` ## 选项 ### A ```cpp if (target < nums[mid]) { lo = mid; } else { hi = mid; } ``` ### B ```cpp if (target > nums[mid]) { hi = mid; } else { lo = mid; } ``` ### C ```cpp if (target >= nums[mid]) { hi = mid; } else { lo = mid; } ```