34. 在排序数组中查找元素的第一个和最后一个位置
题目描述:
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。
你的算法时间复杂度必须是 O(log n) 级别。
如果数组中不存在目标值,返回 [-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]
思想:
使用<algorithm>中的lower_bound()和upper_bound()函数
lower_bound(): 指向首个不小于 value 的元素的迭代器,或若找不到这种元素则为 last
upper_bound(): 指向首个大于 value 的元素的迭代器,或若找不到这种元素则为 last
代码:
class Solution { public: vector<int> searchRange(vector<int>& nums, int target) { vector<int>ans={-1,-1}; auto it_begin = lower_bound(nums.begin(),nums.end(),target); if(it_begin!=nums.end() && *it_begin==target) ans[0]=it_begin-nums.begin(); auto it_end = upper_bound(nums.begin(),nums.end(),target); if(it_end!=nums.begin() && *(it_end-1)==target) ans[1]=it_end-nums.begin()-1; return ans; } };