剑指offer 面试题53 数字在排序数组中出现的次数

剑指Offer(第二版)面试题53:在排序数组中查找数字出现的次数 (尊重劳动成果,转载请注明出处:http://blog.youkuaiyun.com/qq_25827845/article/details/74065254冷血之心的博客) 剑指Offer(第二版)面试题53:在排序数组中查找数字出现的次数 题目一:数字在排序数组中出现的次数 统计一个数字在排序数组中出现的次数。例如,输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在这个数组中出现了4次... 阅读详情

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

tips: 一种方法,先通过二分查找找到这个数字,然后向左和向右遍历,计算这个数字出现的次数, 复杂度o(n)
另外一种方法,先找到第一个k和最后一个k的位置,二者相减,得出出现次数,
找第一个k和最后一个k的过程与二分查找的过程类似,总体的复杂度为o(log(n))

class Solution {
public:
    int GetNumberOfK(vector<int> data ,int k) {
        if(data.size()==0) {
            return 0;
        } 
        int firstK=FindFirstK(data,k,0,data.size()-1);
        int lastK=FindLastK(data,k, 0,data.size()-1);
        if(firstK==-1&&lastK==-1) {
            return 0;
        } else if(firstK==-1||lastK==-1) {
            return 1;
        } else {
            return  lastK-firstK+1;
        }
    }
    int FindFirstK(vector<int>& data,int k,int start,int end) {
        if(start==end) {
            if(data[start]==k) {
                return start;
            } else {
                return -1;
            }
        } else if(start>end) {
            return -1;
        }
        int mid=(start+end)/2;
        if(data[mid]==k) {
            if(mid==start||data[mid-1]<k) {
                return mid;
            } else {
                return FindFirstK(data,k,start,mid);
            }
        } else if(data[mid]>k) {
            return FindFirstK(data,k,start,mid);
        } else {
            return FindFirstK(data,k,mid+1,end);
        }
    }
    int FindLastK(vector<int>& data,int k,int start,int end) {
        if(start==end) {
            if(data[start]==k) {
                return start;
            } else {
                return -1;
            }
        } else if(start>end) {
            return -1;
        }
        int mid=(start+end)/2;
        if(data[mid]==k) {
            if(mid==end||data[mid+1]>k) {
                return mid;
            } else {
                return FindLastK(data,k,mid+1,end);
            }
        } else if(data[mid]>k) {
            return FindLastK(data,k,start,mid);
        } else {
            return FindLastK(data,k,mid+1,end);
        }
    }
};
保姆级教程:用Java和HslCommunication库搞定三菱PLC数据读写(附完整代码) 本文提供了一份详细的Java与三菱PLC通信教程,通过HslCommunication库实现高效数据读写。内容涵盖环境配置、通信模式选择、数据类型操作、异常处理及性能优化,并附有完整代码示例,帮助开发者快速掌握工业自动化中的PLC数据交互技术。 阅读详情

相关推荐

STM32—时钟树(结合系统时钟函数理解)

时钟树的概念: 我们可以把MCU的运行比作人体的运行一样,人最重要的是什么?是心跳! 心脏的周期性收缩将血液泵向身体各处。心脏对于人体好比时钟对于MCU,微控制器(MCU)的运行要靠周期性的时钟脉冲来驱动,而这个脉冲的始源往往是由外部晶体振荡器提供时钟输入,最终转换为多个外部设备的周期性运作。这种时钟“能量”的传递路径犹如大树的养分由主干流向个分支,因此称为时钟树。 STM32时钟: 在STM32...

肥宅快乐博客 1万+

剑指offer面试题53(java版):数字在排序数组中出现的次数

welcome to my blog 剑指offer面试题53(java版):数字在排序数组中出现的次数 题目描述 统计一个数字在排序数组中出现的次数 思路 找到第一个k的索引和最后一个k的索引就知道有序数组中k出现的次数了 笔记 二分法中,最好先判断arr[mid]>k, 接着arr[mid]<k, 剩下的便是arr[mid]==k, arr[mid]==k这个条件就不用显式地...

littlehaes的博客 647

从零构建:STM32与EC800 4G模块的工业物联网数据透传实战

本文详细介绍了如何从零构建STM32与EC800 4G模块的工业物联网数据透传系统。内容涵盖硬件选型、抗干扰电路设计、AT指令稳定性优化、网络连接管理、可靠数据透传协议以及低功耗策略,为开发者提供了一套可直接应用于工业场景的完整实战方案。

uran的专栏 1014

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

题目: 统计一个数字在排序数组中出现的次数。例如输入排序数组[1, 2, 3, 3, 3, 3, 4, 5]和数字3,由于3在这个数组中出现了4次,因此输出4。 样例 输入:[1, 2, 3, 3, 3, 3, 4, 5] , 3 输出:4 解答: class Solution(object): def getNumberOfK(self, nums, k): """ ...

u013796880的博客 167

eMMC数据擦除的方式

接下来主要是讲解erase、trim、discard的差异,涉及的command有CMD35、CMD36、CMD38。一般用来擦除整卡或者某些分区,如果只想擦除一个。以下是device status的部分解释。eMMC的数据擦除方式有6种,分别是。将会跳过写保护,只执行其他的范围。Discard的命令序列是。Erase的命令序列是。的范围有包含写保护,Trim的命令序列是。

DPJimmy的博客 1763

UE5 蓝图节点图文大全(300+蓝图,9万字+)

本文采用虚幻5.2.1版本,以图文的方式对蓝图节点进行介绍,包括蓝图节点的输入输出参数解释,并有中英文节点名称可参考。

一碗清深的博客 2万+

剑指offer 53 数字在排序数组中出现的次数

题目描述 统计一个数字在排序数组中出现的次数。  思路: 仍然使用二分查找思想,尝试不使用两边扫描,便能找到第一个k和最后一个k 分析:当有数字和K相等时,我们先判断这个数字是不是第一个k。如果中间数字的前面一个数字不是K,则此时中间的数字刚好就是第一个k,同理,如果中间数字的后面一个数字不是K,那么中间的数字就是最后一个k 因为GetFirstK和GetLastK都是利用二分查找,所以...

jyh的博客 192

基于Simscape的双PID比例调速阀与比例溢流阀液压控制系统建模与仿真

本文提出了一种基于Simscape的双PID液压控制系统建模方法,通过比例调速阀和比例溢流阀实现液压缸速度与压力的解耦控制。系统采用Simscape Fluids物理建模,精确模拟液压元件非线性特性。文章详细介绍了液压被控对象建模过程,包括动力单元、比例阀组合建模、执行机构及传感器配置。同时设计了双PID控制器架构,分别控制速度环和压力环,并给出参数整定建议。该方法通过物理网络直接模拟流体流动和压力动态,相比传统传递函数法具有更高精度,为液压系统仿真提供了有效解决方案。

AI的内部世界的博客 284

面试题53(一):数字在排序数组中出现的次数

一、题目 统计一个数字在排序数组中出现的次数。例如输入排序数组{1, 2, 3, 3,3, 3, 4, 5}和数字3,由于3在这个数组中出现了4次,因此输出4。 二、关键 三、解释 四、代码 #include &lt;cstdio&gt; int GetFirstK(const int* data, int length, int k, int start, int end); in...

u012197749的博客 281

题解:洛谷 P14357 [CSP-J 2025] 拼数

等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。小 R 想知道,在他所有能拼成的正整数中,最大的是多少。你需要帮助小 R 求出他能拼成的正整数的最大值。小 X 给了小 R 一个字符串。输出一行一个正整数,表示小 R 能拼成的正整数的最大值。中的任意多个数字,按任意顺序拼成一个正整数。,表示小 X 给小 R 的字符串。#普及-# #其他排序#洛谷:[P14357。

团爸讲算法 1394

PyTorch深度学习项目实战100例数据集

最近很多订阅了的用户私信咨询有些数据集下载不了以及一些文章中没有给出数据集链接,为了解决这个问题,专门开设了本篇文章,提供数据集下载链接,打包100例的所有数据集。本专栏适用人群:深度学习初学者,专栏将具体讲解如何快速搭建深度学习模型用自己的数据集实现深度学习小项目。 本专栏整理了《PyTorch深度学习项目实战100例》,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集。

优快云 精品推荐 2万+

剑指offer—53.数字在排序数组中出现的次数—分析及代码(Java)

剑指offer——53.数字在排序数组中出现的次数——分析及代码[Java]一、题目二、分析及代码1. 二分查找(1)思路(2)代码(3)结果三、其他 一、题目 统计一个数字在排序数组中出现的次数。 二、分析及代码 1. 二分查找 (1)思路 因为题目给出的是排序数组,可以结合二分查找的思路,分别找到数组中对应数字的第一个和最后一个位置,计算得出次数。 (2)代码 public class Solution { public int GetNumberOfK(int [] array , int k

江南土豆的博客 191

PHP与Node.js的对比及优缺点分析

PHP和Node.js是两种常用的服务器端编程语言,它们在不同的应用场景下各有优势和劣势。本文将全方位比较PHP和Node.js的特点,以及它们在编程中的优缺点,并提供相应的源代码示例供参考。需要注意的是,本文只是对PHP和Node.js的一些优缺点进行了简要介绍,实际应用中还需要考虑其他因素,如团队经验、项目规模和预算等。最终的选择应该基于全面的评估和需求分析。PHP:PHP是一种同步阻塞的编程语言,它的处理方式是一次只处理一个请求。Node.js:Node.js的性能较高,特别适合处理高并发的请求。

ByteSparkX的博客 887

剑指offer | 面试题53 - I.数字在排序数组中出现的次数

转载本文章请标明作者和出处 本文出自《Darwin的程序空间》 本文题目和部分解题思路来源自《剑指offer》第二版 开始行动,你已经成功一半了,献给正在奋斗的我们 题目 统计一个数字在排序数组中出现的次数 示例: 输入: nums = [5,7,7,8,8,10], target = 8 输出: 2 解题分析 首先我们分析一下题干,一个排序的数组,我们应该下意识的相到,排序的数组,百分之9...

程序员大航子 8059

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

剑指Offer面试题53:数字在排序数组中出现的次数

题目一(数字在排序数组中出现的次数): 统计一个数字在排序数组中出现的次数。 解题思路:考查二分查找的使用 解题代码: 1.没通过() 这种思路是利用二分查找找到一个k(我们要找的数字),然后分别向前向后查找第一个k和最后一个k的位置,然后相减。 class Solution { public: int GetNumberOfK(vector&l...

freeygh的博客 191

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

剑指offer面试题53:在排序数组中数字出现的次数

索引请参考:系列目录 首先声明:本题是受次尝试完全在Ubuntu平台上发布。包括写博客、调试代码。牛客测试结果等。每天进步一点点! 题目 统计一个数字在排序数组中出现的次数 示例: 输入: {1,2,3,3,3,3,4,5} 和 3 输出 4 分析: 思路1: (1)讲数组放入multiset中 (2)利用成员函数count寻找元素个数 思路2:二分法 看到排序数组最直接的方法就是想到二分法了吧~。具体算法原理和用处敬请期待。各位小伙伴也可以先上网搜一搜~ 本题中通过二分法去查找数字的

jjjstephen的博客 157

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【剑指offer】面试题 53:数字在排序数组中出现的次数

题目描述 统计一个数字在排序数组中出现的次数。 时间限制:1秒 空间限制:32768K 热度指数:71223 本题知识点: 数组 参考代码 class Solution { public: int GetNumberOfK(vector data ,int k) { return count(data.begin(),

Jinlong_Xu的博客 530

剑指Offer(第2版)——面试题53:数字在排序数组中出现的次数

题目 统计一个数字在排序数组中出现的次数。 解题思路 既然是已经排序好的数组,那么第一个想到的就是二分查找算法。做法就是使用二分法找到数字k在数组中出现的第一个位置,再利用二分法找到数字k在数组中出现的最后一个位置。时间复杂度为O(logn + logn),最终的时间复杂度为O(logn)。 二分查找第一个k:先拿数组中间的数字和k作比较。如果数组中间的数字大于k,则说明k应该出现在中间位置的左...

qq_32486393的博客 230

《剑指offer》学习笔记_面试题53_数字在排序数组中出现的次数

题目描述 统计一个数字在排序数组总出现的次数。 思路 最直观的方法就是顺序扫描,时间复杂度为O(n)。可以使用二分查找,分别找出排序数组中第一个该数的下标和最后一个该数的下标,然后就可得到数字的出现次数。而二分查找的时间复杂度为O(logn)。 C++实现 class Solution { public: int GetNumberOfK(vector&lt;...

bqw的博客 284

剑指offer---- 面试题53: 数字在排序数组中出现的次数

题目一描述 统计一个数字在排序数组中出现的次数。 思路 直接遍历数组,相等count+1 class Solution(): def GetNumberOfK(self,data,k): count=0 for x in data: if x==k: count+=1 if x>k: return count return coun.

weixin_44568633的博客 223

剑指Offer(牛客版)--面试题53: 数字在排序数组中出现的次数

题目描述: 统计一个数字在排序数组中出现的次数。例如输入排序数组{1, 2, 3, 3, 3, 3, 4, 5}和数字3,由于3在这个数组中出现了4次,因此输出4。 分析: 整体思路: 求第一个 K和最后一个 K 的下标: 完整代码: class Solution { public: int GetNumberOfK(vector<i...

汤姆鱼 230

剑指offer 面试题53 python版+解析:数字在排序数组中出现的次数, 0~n-1中缺失的数字

题目描述 统计一个数字在排序数组中出现的次数。 思路:二分法查找第一个出现的位置,和最后一次出现的位置。 # -*- coding:utf-8 -*- class Solution: def GetNumberOfK(self, data, k): # write code here number = 0 if data: ...

Yenpo Ma的博客 438

《剑指offer》刷题——【时间效率与空间效率的平衡】面试题53:数字在排序数组中出现的次数(java实现)

《剑指offer》刷题——【时间效率与空间效率的平衡】面试题53:数字在排序数组中出现的次数(java实现)一、题目描述二、题目分析方法一:遍历方法二:二分法 一、题目描述 统计一个数字在排序数组中出现的次数。 二、题目分析 方法一:遍历 遍历一边数组 比较每一个数字 统计指定数字出现的次数 时间复杂度:O(n) public class Solution { public int ...

HW_870754395的博客 287

剑指offer 53-I 在排序数组中查找数字I (二分查找)

   这道题我们可以用暴力解决,使用数组或者HashMap来记录每个元素出现的次数。但是这题已经说了是排序数组,所以这样的时间复杂度就高。对于有顺序的查找,我们会想到二分。这个二分还是有点特别的,我们既要找target第一次出现的位置,还要找target最后一次出现的位置。    初始化:左边界i=0,右边界j=nums.length-1    循环二分:当闭区间[i,j]无元素时跳出   &nb.

weixin_51656756的博客 470

大神整理的剑指Offer【所有面试题汇总】

    剑指Offer学习   剑指Offer这本书已经学习完了,从中也学习到了不少的东西,现在做一个总的目录,供自已和大家一起参考,学如逆水行舟,不进则退。只有不断地学习才能跟上时候,跟得上技术的潮流! 所有代码下载【https://github.com/Wang-Jun-Chao/coding-interviews】 目录 第01-10题 【剑指Offer学习】【面试题02:...

晓飛的博客 3万+

剑指 Offer(第2版)面试题 53:在排序数组中查找数字

剑指 Offer(第2版)面试题 53:在排序数组中查找数字

ProgramNovice的博客 1330
上一篇: 剑指offer 面试题39 数组中出现次数超过一半的数字
下一篇: 剑指offer 面试题29 顺时针打印矩阵
wenkun97
博客等级 码龄10年 15粉丝 139原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值