您的位置:首页 > 其它

[LeetCode] Search for a Range

2015-08-15 16:23 531 查看
The idea is to search for the left and right boundaries of target via two binary searches. Well, some tricks may be needed. Take a look at this link :-)

The code is rewritten as follows.

class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
int l = left(nums, target);
if (l == -1) return {-1, -1};
return {l, right(nums, target)};
}
private:
int left(vector<int>& nums, int target) {
int n = nums.size(), l = 0, r = n - 1;
while (l < r) {
int m = l + ((r - l) >> 1);
if (nums[m] < target) l = m + 1;
else r = m;
}
return nums[l] == target ? l : -1;
}
int right(vector<int>& nums, int target) {
int n = nums.size(), l = 0, r = n - 1;
while (l < r) {
int m = l + ((r - l + 1) >> 1);
if (nums[m] > target) r = m - 1;
else l = m;
}
return r;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: