题目:
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].
思路:
有序数组中查找某个数出现的起始和结束位置,简单二分查找
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].
思路:
有序数组中查找某个数出现的起始和结束位置,简单二分查找
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
int start = 0, end = nums.size() - 1;
vector<int> search;
if (nums.empty()) {
search.push_back(-1);
search.push_back(-1);
return search;
}
int i, j;
bool havefind = false;
while (start <= end) {
if (start == end) {
if (nums[start] == target) {
i = start;
while (i >= 0 && nums[i] == target) {
i--;
}
j = start;
while (j < nums.size() && nums[j] == target) {
j++;
}
havefind = true;
}
break;
}
int harve = (start + end) / 2;
if (nums[harve] < target) {
start = harve+1;
}
else if(nums[harve]>target){
end = harve-1;
}
else {
i = harve;
while (i>=0&&nums[i] == target) {
i--;
}
j = harve;
while (j < nums.size()&& nums[j] == target) {
j++;
}
havefind = true;
break;
}
}
if (havefind) {
search.push_back(i + 1);
search.push_back(j - 1);
}
else
{
search.push_back(-1);
search.push_back(-1);
}
return search;
}
};