LCR 172. 统计目标成绩的出现次数(二分查找)

某班级考试成绩按非严格递增顺序记录于整数数组 scores,请返回目标成绩 target 的出现次数。

示例 1:

输入: scores = [2, 2, 3, 4, 4, 4, 5, 6, 6, 8], target = 4
输出: 3

示例 2:

输入: scores = [1, 2, 3, 5, 7, 9], target = 6
输出: 0

提示:

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

思路: 

1、有序数组查找目标值采用二分查找。

2、因为需要查找目标值出现的次数,我们可以通过查找目标值的右边界和左边界,相减即可的结果。

3、比如数组[1,2,3,3,4],我们查找3出现的次数,可以通过查找右边界4的下标和以(target-1)为目标值查找出的右边界也就是2的右边界,第一个3的下标,通过相减即可得出3出现了几次。

代码实现: 

 

class Solution {
public:
    int binarySearch(vector<int>& scores, int target)
    {
        int size = scores.size();
        if(size == 0)
            return 0;
        int low = 0, high = size - 1;
        while(low <= high)
        {
            int mid = low + (high - low) / 2;
            if(scores[mid] <= target)           //此处的等于号就是为了找到target的右边界
                low = mid + 1;
            else
                high = mid - 1;
        }
        return low;
    }
    int countTarget(vector<int>& scores, int target) {
        return binarySearch(scores, target) - binarySearch(scores, target - 1);
    }
};

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-12 04:00:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-12 04:00:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-12 04:00:04       87 阅读
  4. Python语言-面向对象

    2024-03-12 04:00:04       96 阅读

热门阅读

  1. 蓝桥杯2023年-更小的数(字符串,推理)

    2024-03-12 04:00:04       42 阅读
  2. Android Selinux详解[二]--新增文件标签相关

    2024-03-12 04:00:04       44 阅读
  3. qwen API调用

    2024-03-12 04:00:04       57 阅读
  4. 【MyBatis-Plus 常用注解详解】

    2024-03-12 04:00:04       39 阅读
  5. react hook: useLayoutEffect

    2024-03-12 04:00:04       46 阅读
  6. 如何优雅的比较两个对象是否相等

    2024-03-12 04:00:04       43 阅读
  7. 在并发场景如何正确的使用锁机制呢?

    2024-03-12 04:00:04       44 阅读