剑指Offer的学习笔记(C#篇)-- 数字在排序数组中出现的次数
题目描述
统计一个数字在排序数组中出现的次数。
一 . 题目分析
该题目并不是难题,但该题目考察目的是正确的选择合适的查找方法。题目中有一个关键词是:排序数组,也就是说,该数组已经排好了,我一开始直接遍历了一遍数组,有相同的就加1,代码量虽然很少,但这很显然是效率很低的方法。所以又重新码了二分查找法的代码。
根据题意,使用这种方法要考虑到两点:
1. 把二分查找法先构造出来。
2. 统计数字k在数组中出现次数。
二 . 代码实现
class Solution
{
public int GetNumberOfK(int[] data, int k)
{
// write code here
// 鲁棒判断
if (data.Length == )
return ;
// 使用二分查找法:定义前指针min,后指针max,中间指针mid,计数器count
int min = ,max = data.Length - ,mid = ,count = ;
// 构建二分查找模型
while(min <= max)
{
if (min > max)
break;
mid = (max+min)/;
if(data[mid] == k)
{
break;
}
else if(data[mid]<k)
{
min = mid+;
}
else
{
max = mid-;
}
}
// 若存在中间数 == k,给count赋值为1
if(data[mid] == k)
{
count = ;
}
// 统计一个k在排序数组中出现的次数
for (int i = ; i < data.Length; i++)
{
// 定义循环停止条件,提高效率
bool firstFlag = false;
bool secondFlag = false; // 左侧重复数的累加
if (mid - i >= && data[mid - i] == k)
{
firstFlag = true;
count++;
} // 右侧重复数的累加
if (mid + i < data.Length && data[mid + i] == k)
{
secondFlag = true;
count++;
} // 循环停止条件
if (firstFlag == false && secondFlag == false)
{
break;
}
}
// 返回次数
return count;
}
}
做题目的时候最好先自己写写画画,设置好逻辑关系非常重要!!
剑指Offer的学习笔记(C#篇)-- 数字在排序数组中出现的次数的更多相关文章
- 剑指Offer(三十七):数字在排序数组中出现的次数
剑指Offer(三十七):数字在排序数组中出现的次数 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.n ...
- 【剑指offer】面试题38:数字在排序数组中出现的次数
题目: 统计一个数字在排序数组中出现的次数. 思路: 对二分查找进行改进,找到数字在数组中第一次出现和最后一次出现的位置,这样就得到它出现的次数. 以找第一次出现的位置为例:如果mid元素大于k,则在 ...
- (剑指Offer)面试题38:数字在排序数组中出现的次数
题目: 统计一个数字在排序数组中出现的次数. 思路: 1.顺序遍历 顺序扫描一遍数组,统计该数字出现的次数. 时间复杂度:O(n) 2.二分查找 假设我们需要找的数字是k,那么就需要找到数组中的第一个 ...
- Go语言实现:【剑指offer】数字在排序数组中出现的次数
该题目来源于牛客网<剑指offer>专题. 统计一个数字在排序数组中出现的次数. 看到排序数组,要想到用二分查找. 先找到最前面的数字k,再找到最后面的数字k,通过下标求出次数. Go语言 ...
- 【Java】 剑指offer(53-1) 数字在排序数组中出现的次数
正文 本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 统计一个数字在排序数组中出现的次数.例如输入排序数组{1, ...
- 剑指Offer - 九度1349 - 数字在排序数组中出现的次数
剑指Offer - 九度1349 - 数字在排序数组中出现的次数2013-11-23 00:47 题目描述: 统计一个数字在排序数组中出现的次数. 输入: 每个测试案例包括两行: 第一行有1个整数n, ...
- 【剑指Offer面试编程题】题目1349:数字在排序数组中出现的次数--九度OJ
题目描述: 统计一个数字在排序数组中出现的次数. 输入: 每个测试案例包括两行: 第一行有1个整数n,表示数组的大小.1<=n <= 10^6. 第二行有n个整数,表示数组元素,每个元素均 ...
- 数字在排序数组中出现的次数 牛客网 剑指Offer
数字在排序数组中出现的次数 牛客网 剑指Offer 题目描述 统计一个数字在排序数组中出现的次数. class Solution: def GetNumberOfK(self, data, k): i ...
- 【剑指Offer】数字在排序数组中出现的次数 解题报告(Python)
[剑指Offer]数字在排序数组中出现的次数 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interv ...
- 【Offer】[53-1] 【数字在排序数组中出现的次数】
题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 统计一个数字在排序数组中出现的次数.例如,输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在这个数组中出现了4次,因此输出 ...
随机推荐
- 3D文字特效
在线演示 本地下载
- GPIO设备虚拟文件结点的创建【转】
本文转载自:http://blog.csdn.net/dwyane_zhang/article/details/6742066 所谓GPIO设备虚拟文件结点,就是方便用户在应用程序直接操纵GPIO的值 ...
- jenkins maven tomcat做持续集成
maven 采用 maven 3.0以上的版本.tomcat 采用 tomcat 7.0 以上的版本 1. tomcat 配置用户账号和权限 tomcat-users.xml <role rol ...
- 基于node.js及express实现中间件,实现post、get
首先,当然是有必要的环境,安装node,这个我就不多说了. 依赖模块: "express": "^4.13.4", "request": & ...
- js 阿拉伯数字转转汉字
js:(单纯的转汉字,没有个.十.千.万,待我日后完善) var number = 323413290907; var N = [ "零", "一", &quo ...
- spring框架IOC原理分析代码
模拟ClasspathXmlApplication: package junit.test; import java.beans.Introspector; import java.beans.Pro ...
- python raw string
path = r'C:\a\b\c.txt' r'字符串' 是raw 字符串的意思, 其中的字符串不会转义,即不解释 \ . 作用之一:可以用来保存Windows的路径,直接从资源管理器复制来粘贴,不 ...
- BrowserSync(省时的浏览器同步测试工具)
第一步:安装node 第二步:安装BrowserSync npm install -g browser-sync 第三部:启动BrowserSync 假如我在D盘建立一个文件test,里面分别包括in ...
- HihoCoder1654: XY游戏([Offer收割]编程练习赛39)(好久没写搜索)(已经超级简短了)
描述 如下图所示,在4x4的棋盘上有X和Y两种棋子各若干枚:O表示空格. OXXY YOOX XOOY XOXX 小Hi每次可以选择任意一枚棋子,将它移动到上下左右相邻的空格中. 小Hi想知道最少移动 ...
- 「LOJ#6121」「网络流 24 题」孤岛营救问题(BFS
题目描述 1944 年,特种兵麦克接到国防部的命令,要求立即赶赴太平洋上的一个孤岛,营救被敌军俘虏的大兵瑞恩.瑞恩被关押在一个迷宫里,迷宫地形复杂,但幸好麦克得到了迷宫的地形图.迷宫的外形是一个长方形 ...