剑指 Offer 53 - I. 在排序数组中查找数字 I

57 阅读1分钟

剑指 Offer 53 - I. 在排序数组中查找数字 I

统计一个数字在排序数组中出现的次数。

示例 1:

输入: nums = [5,7,7,8,8,10], target = 8
输出: 2

示例 2:

输入: nums = [5,7,7,8,8,10], target = 6
输出: 0

提示:

  • 0 <= nums.length <= 105
  • -109 <= nums[i] <= 109
  • nums 是一个非递减数组
  • -109 <= target <= 109

学习STL查找函数的使用

//基于二分查找

//查找不小于目标值的第一个元素,返回指针
auto it = lower_bound(row.begin(), row.end(), target);

//查找大于目标值的第一个元素,返回指针
auto it = upper_bound(row.begin(), row.end(), target);
class Solution {
public:
    int search(vector<int>& nums, int target) {
        if(nums.size()==0) return 0;
        int cnt = 0;
        //找到第一个不大于target的数的指针
        auto i = lower_bound(nums.begin(),nums.end(),target);
        //往后遍历
        for(;i<nums.end();i++){
            if(*i==target) cnt++;
            else break;
        }
        return cnt;
    }
};