题目描述:
Given a sorted array of n integers, find the starting and ending position of a given target value.
If the target is not found in the array, return [-1, -1]
.
Example
Given [5, 7, 7, 8, 8, 10]
and target value 8
,
return [3, 4]
.
Challenge
题目思路:
O(log n) time.
这题我就用了简单的思路:找两次,第一次找最早出现target value的位置;第二次找最晚出现target value的位置。自觉code写的有些啰嗦,因为两段非常相似。。。
Mycode(AC = 49ms):
class Solution {
/**
*@param A : an integer sorted array
*@param target : an integer to be inserted
*return : a list of length 2, [index1, index2]
*/
public:
vector<int> searchRange(vector<int> &A, int target) {
// write your code here
int l = 0, r = A.size() - 1;
vector<int> ans(2, -1);
if (A.size() == 0) return ans;
// find the most left target value in A
while (l + 1 < r) {
int mid = (l + r) / 2;
if (A[mid] < target) {
l = mid;
}
else if (A[mid] >= target) {
r = mid;
}
}
// searching from l to r
if (A[l] == target) {
ans[0] = l;
}
else if (A[r] == target) {
ans[0] = r;
}
else {
ans[0] = -1;
}
// find the most right target value in A
l = 0; r = A.size() - 1;
while (l + 1 < r) {
int mid = (l + r) / 2;
if (A[mid] <= target) {
l = mid;
}
else if (A[mid] > target) {
r = mid;
}
}
// searching from r to l
if (A[r] == target) {
ans[1] = r;
}
else if (A[l] == target) {
ans[1] = l;
}
else {
ans[1] = -1;
}
return ans;
}
};