题目原文:
Given a sorted array of integers, find the starting and ending position of a given target value.
题目大意:
给出排序好的数组,寻找目标值所在的下标区间。如果目标值不存在,返回[-1,-1].
题目分析:
朴素解法是逐一比较,找到开始节点后再向后找,优化解法是使用两次二分查找。而二分查找可以使用C++的lower_bound和upper_bound两个内置的接口实现。(这个学习了。)
源码:(language:cpp)
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
auto p1 = lower_bound(nums.begin(), nums.end(), target);
auto p2 = upper_bound(nums.begin(), nums.end(), target);
vector<int> res; res.clear();
if(*p1 != target) {
res.push_back(-1);
res.push_back(-1);
return res;
}
res.push_back(p1 - nums.begin());
res.push_back(p2 - nums.begin() - 1);
return res;
}
};
成绩:
12ms,beats 7.83%,众数12ms, 90.36%