题目分析:[[EVD]] - 剑指 Offer 53 - I. 在排序数组中查找数字 I
https://leetcode-cn.com/problems/zai-pai-xu-shu-zu-zhong-cha-zhao-shu-zi-lcof/
简单描述:
- 统计target在排序数组中出现的次数
限制🚫
- 0 <= nums.length <= 10^5
- 10^9 <= nums[i] <= 10^9
- nums 是一个非递减数组
- -10^9 <= target <= 10^9
示例:
输入: nums = [5,7,7,8,8,10], target = 8
输出: 2
解题思路:
思路:
- #二分查找 在有序数组中,二分查找target,确定左右边界,right-left+1计算得出
效率:
- 时间复杂度
- 空间复杂度
代码:
class Solution
{
public:
/*二分查找*/
int search(vector<int> &nums, int target)
{
int left = 0, right = nums.size() - 1;
while (left <= right)
{
int mid = left + (right - left) / 2;
if (nums[mid] < target)
left = mid + 1;
else if (nums[mid] > target)
right = mid - 1;
else
{
while (nums[left] != target)
left++;
while (nums[right] != target)
right--;
break;
}
}
return right - left + 1;
}
};