学习目标:
巩固二分查找使用。
学习内容:
力扣P34-在排序数组中查找元素的第一个和最后一个位置
学习时间:
2023.1.21,大年三十除夕
提示:这里可以添加计划学习的时间
学习产出:
题目
分析
看到熟悉时间复杂度O(log n),马上反应,二分查找。
代码
class Solution
{
public:
int binarySearch(vector<int>& nums, int target, bool lower)
{
int left = 0, right = (int)nums.size() - 1, ans = (int)nums.size();
while (left <= right)
{
int mid = (left + right) / 2;
if (nums[mid] > target || (lower && nums[mid] >= target))
{
right = mid - 1;
ans = mid;
}
else
{
left = mid + 1;
}
}
return ans;
}
vector<int> searchRange(vector<int>& nums, int target)
{
int leftIdx = binarySearch(nums, target, true);
int rightIdx = binarySearch(nums, target, false) - 1;
if (leftIdx <= rightIdx && rightIdx < nums.size() && nums[leftIdx] == target && nums[rightIdx] == target)
{
return vector<int>{leftIdx, rightIdx};
}
return vector<int>{-1, -1};
}
};
在这里插入代码片
总结
除夕夜祝大家新年快乐,能力越来越强!共勉!