剑指offer 38_统计数组中k出现的个数
思路:
二分法,分别找出第一个和最后一个k出现的位置。相减 加一
#include <stdio.h>
//获取第一个K的位置
int getFirstK (int k,int *numbers,int start,int end){ if(start > end){
return -;
} int middle = (start + end) / ;
int middleData = numbers[middle]; if(middleData < k){
start = middle + ;
}else if(middleData > k){
end = middle - ;
}else{
if(middle> && numbers[middle-]!=k //注意这个if
|| middle==){
return middle;
}else{
end = middle -;
}
} getFirstK(k,numbers,start,end);
}
//获取最后一个K的位置
int getLastK (int k,int *numbers,int start,int end){ if(start > end){
return -;
} int middle = (start + end) / ;
int middleData = numbers[middle]; if(middleData < k){
start = middle + ;
}else if(middleData > k){
end = middle - ;
}else{
if(middle<end && numbers[middle+]!=k
|| middle==end){
return middle;
}else{
start = middle + ;
}
} getLastK(k,numbers,start,end);
} //得到k 在numbers中的个数
int getNumberOfK(int k, int* numbers,int length){
if(numbers == NULL || length <= ){
return ;
} int last = getLastK(k, numbers,, length-);
int first = getFirstK(k, numbers,, length-); if(last == - || first == -){
return ;
}
return last - first + ;
} int main(){ int numbers1[] = {,,,,,,,,,,,,,,,,,,,};
printf("%d\n",getNumberOfK(,numbers1,)); int numbers2[] = {,,,,,,,,,};
printf("%d\n",getNumberOfK(,numbers2,)); int* numbers3 = NULL;
printf("%d\n",getNumberOfK(,numbers3,)); }
剑指offer 38_统计数组中k出现的个数的更多相关文章
- 《剑指offer》旋转数组中的最小数字
本题来自<剑指offer> 旋转数组中的最小数字 题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例 ...
- 剑指 Offer 56 - II. 数组中数字出现的次数 II + 位运算
剑指 Offer 56 - II. 数组中数字出现的次数 II Offer_56_2 题目详情 解题思路 java代码 package com.walegarrett.offer; /** * @Au ...
- 剑指 Offer 56 - I. 数组中数字出现的次数 + 分组异或
剑指 Offer 56 - I. 数组中数字出现的次数 Offer_56_1 题目描述 解题思路 java代码 /** * 方法一:数位方法 */ class Offer_56_1_2 { publi ...
- 【剑指Offer】旋转数组中的最小数字 解题报告(Python)
[剑指Offer]旋转数组中的最小数字 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-intervie ...
- 【剑指offer】03.数组中重复的数组
剑指 Offer 03. 数组中重复的数字 知识点:数组:哈希表:萝卜占坑思想 题目描述 找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些 ...
- [剑指Offer]53-在排序数组中查找数字(二分查找)
题目一 数字在排序数组中出现的个数 题目描述 统计一个数字在排序数组中出现的次数. 解决思路 写两个二分查找分别找第一个和最后一个该数字,然后可直接出计算有几个该数字.时间复杂度为O(logn). 这 ...
- 【剑指offer】数字数组中只出现一次(2)
转载请注明出处:http://blog.csdn.net/mmc_maodun/article/details/27800577 题目:一个int数组中有三个数字a.b.c仅仅出现一次,其它数字都出现 ...
- 剑指 Offer 56 - II. 数组中数字出现的次数 II
题目描述 在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次.请找出那个只出现一次的数字. 示例1: 输入:nums = [3,4,3,3] 输出:4 示例2: 输入:nums = ...
- 【剑指offer】73.数组中出现次数超过一半的数字
73.数组中出现次数超过一半的数字 知识点:数组:哈希:占领地思想: 题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4 ...
随机推荐
- centos:rpm安装,软件安装
1,先检查 软件包是否存在: 以parted命令为例: rpm -qa|grep parted 2.如果没有,则安装: yum install parted
- Linux中的固件加载例子
AP6335模块(BCM4339)在上电运行时,是需要刷入固件的,其在普通WIFI模式和AP模式之间切换时,也是需要加载不同的固件的,其位于/system/etc/firmware/下面:fw_bcm ...
- Tomcat 多端口访问多应用设置
目的 配置Tomcat,使用多端口访问不同应用 步骤 测试Tomcat版本为apache-tomcat-8.0.5,理论上支持7.0之上的版本 找到tomcat的主目录,打开conf文件夹,找到并打开 ...
- power designer 设计数据库生成到oracle数据库
一.概念模型设计 1. 创建工程,创建概念设计模型,在快捷菜单栏调出 palette 找到表格工具,在主界面中创建表格. 2. 创建出的表格,双击进入设计模式 -------------------- ...
- LeetCode OJ:Unique Paths(唯一路径)
A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). The ...
- pthread_getspecific()--读线程私有数据|pthread_setspecific()--写线程私有数据
原型: #include <pthread.h> void *pthread_getspecific(pthread_key_t key); int pthread_setspecific ...
- 使用visio 2010建立sql server数据模型——手动画、利用逆向工程
基础数据库这个词不在新鲜,老早就提出了.咱们从出生,个人信息就被放到一个基本信息库中了,在全国各地,通过身份证号就能知道你的基本信息.最近米老师 下发了一个任务,让我们开发几个小项目,考试系统.选修课 ...
- nginx配置允许指定域名下所有二级域名跨域请求
核心原理是根据请求域名匹配是否是某域名的二级域名判断是否添加允许跨越头. #畅游www server { listen 8015; server_name test-tl.changyou.com; ...
- .net remoting和wcf自托管——一个bug引发的警示
一.解决问题,需要深入,并从细节入手,多从代码找原因,不能认为代码是死的,不会出错: 之前代码都运行良好,突然某一天,在我电脑上出问题了.出了问题,那就应该找出原因.其实这个问题,本身并不难,好歹给你 ...
- Python 2.7_爬取CSDN单页面利用正则提取博客文章及url_20170114
年前有点忙,没来的及更博,最近看爬虫正则的部分 巩固下 1.爬取的单页面:http://blog.csdn.net/column/details/why-bug.html 2.过程 解析url获得网站 ...