您的位置:首页 > 其它

【LeetCode 34】Search for a Range

2015-07-19 15:27 477 查看
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)。

思路:

  有序数组+ O(log n),很显然二分搜索啦。

C++:

class Solution {
public:

int Bsearch(vector<int>& nums, int len, int start, int end, int tar, bool flag)
{
if(start > end)
return -1;

int mid = (start + end) / 2;

if(nums[mid] == tar)
{
if(flag)
{
if((mid > 0 && nums[mid - 1] != tar) || mid == 0)
{
return mid;
}
else
{
return Bsearch(nums, len, start, mid - 1, tar, flag);
}
}
else
{
if((mid < len - 1 && nums[mid + 1] != tar) || mid == len - 1)
{
return mid;
}
else
{
return Bsearch(nums, len, mid + 1, end, tar, flag);
}
}

}
else if(nums[mid] < tar)
{
return Bsearch(nums, len, mid + 1, end, tar, flag);
}
else
{
return Bsearch(nums, len, start, mid - 1, tar, flag);
}
}

vector<int> searchRange(vector<int>& nums, int target) {

int len = nums.size();
vector<int> ret;
if(len == 0)
return ret;

ret.push_back(Bsearch(nums, len, 0, len - 1, target, true));
ret.push_back(Bsearch(nums, len, 0, len - 1, target, false));

return ret;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: