您的位置:首页 > 其它

[Leetcode] Search for a Range

2016-12-27 23:00 417 查看

描述

Given a sorted array of integers, find the starting and ending position of a given target value.

Your algorithm’s runtime complexity must be in the order of O(log n).

If the target is not found in the array, return [-1, -1].

For example,
Given [5, 7, 7, 8, 8, 10] and target value 8,
return [3, 4].


给定一个有序数组以及目标值,找出目标值在数组中的范围。

分析

因为是有序数组,查找范围时可以采用二分法,因此可以进行两次二分查找,分别找出目标值的左界以及右界,此外需要注意判断目标值是否在数组中,时间复杂度 O(log(n)) 。

这里需要注意一下两次二分查找写法的不同。

代码

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