34. Find First and Last Position of Element in Sorted Array
1.問題
給予一個升冪排序過的array, 找出首次出現及最後出現的位置
時間複雜度須為O(log n)
如果array中沒有target, 則回傳 [-1, -1]

2.想法
O(log n)暗示使用binary search:
找出target的left bound, 並找出target + 1的left bound -1
3.程式碼
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
vector<int> res;
if (nums.size() == 0) {
res.push_back(-1);
res.push_back(-1);
return res;
}
int first = getLowerBound(nums, target, 0, nums.size() - 1);
int second = getLowerBound(nums, target + 1, 0, nums.size() - 1) - 1;
if (first < nums.size() && nums[first] == target) {
res.push_back(first);
res.push_back(second);
} else {
res.push_back(-1);
res.push_back(-1);
}
return res;
}
private:
int getLowerBound(vector<int>& nums, int target, int left, int right)
{
if (left > right) {
return left;
}
int mid = (left + right) / 2;
if (nums[mid] < target) {
return getLowerBound(nums, target, mid + 1, right);
} else {
return getLowerBound(nums, target, left, mid - 1);
}
}
};
Last updated