java 数组中某个数出现的概率_剑指Offer解题报告(Java版)——排序数组中某个数的个数 38...
分析问题
问题只需要找到排序数组中某个数K的个数,由于已经是排序了,K一定是在一堆的,所以我们只需要找到第一个K的index1,然后找到最后一个K的index2就可以了
而寻找K的过程我们一般通过二分法查找,这样时间复杂度能降到logn
解决问题
我们通过二分法寻找k,如果中间的数小于k,那么在前半段找k;如果中间的数大于k,那么在后半段找k,那么如何判断找到的k是否是一堆k的边界呢
找第一个k的时候判断方式如下:
如果中间的数等于k,那么先判断前一个数是否存在,如果存在且等于k,在前半段找
如果存在不等于k或者不存在,那么这个数就是第一个k
找最后一个k的时候判断方式如下:
如果中间的数等于k,那么先判断后一个数是否存在,如果存在且等于k,在后半段找,如果存在不等于k或者不存在,那么这个数就是最后一个k
主要代码
int getLastK(int[] data,int length,int k,int start,int end){
if (start>end) {
return -1;
}
int midIndex=(start+end)/2;
int midData=data[midIndex];
if (data[midIndex]==k) {
if( (midIndex
return midIndex;
}else {
start=midIndex+1;
}
}else if (midData
start=midIndex+1;
}else {
end=midIndex-1;
}
return getLastK(data,length,k,start,end);
}
int getFirstK(int[] data,int length,int k,int start,int end){
if (start>end) {
return -1;
}
int midIndex=(start+end)/2;
int midData=data[midIndex];
if (data[midIndex]==k) {
if( (midIndex>0&&data[midIndex-1]!=k)||midIndex==0) {
return midIndex;
}else {
end=midIndex-1;
}
}else if (midData>k) {
end=midIndex-1;
}else {
start=midIndex+1;
}
return getFirstK(data,length,k,start,end);
}
int getNumOfK(int[] data,int length,int k){
int result = 0;
if (data!=null&&length>0) {
int first=getFirstK(data, length, k, 0, length-1);
int last=getLastK(data, length, k, 0, length-1);
System.out.println(first);
System.out.println(last);
if (first>-1&&last>-1) {
result=last-first+1;
}
}
return result;
}
java 数组中某个数出现的概率_剑指Offer解题报告(Java版)——排序数组中某个数的个数 38...相关推荐
- java计算筛子概率_剑指Offer解题报告(Java版)——n个骰子的点数 43
问题 n个骰子朝上的数之和为s,求s的所有可能以及概率 分析问题 如果是用笨方法,一般人最开始都会想到笨方法,那就是枚举法 举个例子,比如两个骰子,第一个骰子的结果为1,2,3,4,5,6,两个骰子的 ...
- java统计一个字符串中每个字符出现的次数_剑指offer算法题054:字符流中第一个不重复的字符...
推荐阅读:宇宙条的工作总结:一年前还在面试找工作,一年后在面试找工作的学弟学妹们:第一次当面试官的经历分享小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合 ...
- 统计数组中每个数字出现的次数_剑指Offer(二十八) 数组中次数出现超过一半的数字...
题目描述 思路与解析 题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长 ...
- java翻转单词顺序split_剑指offer解题报告(Java版)——翻转单词顺序 左旋字符串 42...
引言 这种翻转的问题会遇到很多,其实就是一个倒序的问题,对于第一个题只是想翻转单词的顺序,而并不想把整个字符串翻转了,如果完全翻转的话,比如I am a student.中所有字符翻转得到.tnedu ...
- 8. 返回数组里出现次数最多的数字_剑指offer 数组中出现次数超过一半的数字
题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...
- 两个数组中对应的下标的值合成一个新的数组_剑指 offer 面试题精选图解 03 . 数组中重复的数字
今天分享的题目来源于 LeetCode 上的剑指 Offer 系列 面试题03. 数组中重复的数字. 题目链接:https://leetcode-cn.com/problems/shu-zu-zhon ...
- 在数组中查找指定元素_剑指 offer 第一题: 二维数组中的查找
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...
- 【牛客 - 剑指offer】JZ53 数字在升序数组中出现的次数 Java实现
文章目录 剑指offer题解汇总 Java实现 本题链接 题目 方案一 暴力 方案二 二分(推荐) 剑指offer题解汇总 Java实现 https://blog.csdn.net/guligulig ...
- java计算整数出现的次数_[剑指offer题解][Java]1到n整数中1出现的次数
前言 众所周知,<剑指offer>是一本"好书". 如果你是个算法菜鸡(和我一样),那么最推荐的是先把剑指offer的题目搞明白. 对于剑指offer题解这个系列,我的 ...
最新文章
- 使用 Amazon Cloud WAN 构建您的全球网络
- sql 日期和当前日期时间差_详解PostgreSQL 如何获取当前日期时间
- Mybatis-puls打印sql语句
- python random randint_python中random.randint(1,100)随机数中包不包括1和100
- java获取cpu使用率_2019年阿里P8架构师的解析:最新Java性能测试、调优策略
- Docker安装禅道项目管理平台zendao-v11.6.x
- 热情不减!iPhone12国行首批供货已售罄
- 模块间同步消息队列的设计
- drools规则引擎源码解析
- 普加计划甘特图功能介绍
- lua unpack php,Lua 可变参数 和 table.unpack() 函数
- python身高体重程序代码_python EM算法4(身高体重数据集)
- 让我们再聊聊TDD 续-正其思规其行
- python数学符号代码_用Python学数学之Sympy代数符
- 《C#零基础入门之百识百例》(五十八)接口 -- 模拟银行存储
- 知识付费 知识变现的商业逻辑与实操指南
- 读汤用彤之《印度哲学史略》
- Win10更新:你的设备中缺少重要的安全和质量修复。
- java 配置excel版本_JAVA实现Excel导入/导出 以及excel样式设置
- 使用red5和OBS搞出自己的直播平台来挑战bilibili(B站)
热门文章
- Gradle中依赖任务产生的不同输出
- 使用SAP Analytics Cloud统计SAP C4C系统创建Lead里包含的产品信息分布情况
- 用React开发SAP Fiori应用
- error when defining a rule - SAP loyalty management的积分定义规则
- save product in COMMPR01的调试和调用栈
- frontend badi
- 用纯CSS实现3D立方体效果
- Equipment download - No data contained in BDoc
- 如何解决AET field创建失败后的一系列dump
- 某互联网公司校园招聘的小组面试题