剑指Offer - 数字在排序数组中出现的次数

https://www.nowcoder.com/practice/70610bf967994b22bb1c26f9ae901fa2?tpId=13&tqId=11190&tPage=2&rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

 

题目描述

统计一个数字在排序数组中出现的次数。
 
 
复制代码
class Solution {
    int findK(vector<int> &data ,int k) {
        int first = 0;
        int last = data.size() - 1;
        
        while (first <= last) {
            int mid = first + (last - first) / 2;
            if (data[mid] == k) return mid;
            else if (data[mid] < k) first = mid + 1;
            else last = mid - 1;
        }
        return -1;
    }
public:
    int GetNumberOfK(vector<int> data ,int k) {
        if (data.size() == 0) return 0;
        int idx = findK(data, k);
        if (idx == -1) return 0;
        int first = idx, last = idx;
        while (first >= 0 && data[first] == data[idx]) first--;
        while (last < data.size() && data[last] == data[idx]) last++;
        return last - first -1;
    }
};
复制代码

 

posted @   blcblc  阅读(99)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
历史上的今天:
2017-02-13 跟风记录一个知乎热门讨论-腾讯/阿里/百度哪个部门最值得加入
2017-02-13 Storm同时接收多个源(spout和bolt)
2017-02-13 各种流处理系统的比较
2017-02-13 Kafka学习
2017-02-13 关联规则推荐及Apriori算法
点击右上角即可分享
微信分享提示