Search for a Range
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
return
Given
[5, 7, 7, 8, 8, 10]
and target value 8,return
[3, 4]
.class Solution {
public:
vector
// Start typing your C/C++ solution below
// DO NOT write int main() function
// binary search in the given array
int start = 0, end = n-1, mid;
vector
bool is_found = false;
int c1 = -1, c2 = -1;
while (start <= end)
{
mid = (start + end) / 2;
if (target == A[mid])
{
is_found = true;
break;
}
else if (target > A[mid])
start = mid + 1;
else
end = mid - 1;
}
if (is_found)
{
// move cursors
c1 = mid, c2 = mid;
while (A[c1] == target && c1 >= 0)
c1--;
while (A[c2] == target && c2 < n)
c2++;
c1++;
c2--;
}
result.push_back(c1);
result.push_back(c2);
return result;
}
};
No comments:
Post a Comment