【剑指offer 面试题38】数字在排序数组中出现的次数
思路:
利用二分查找,分别查找待统计数字的头和尾的下标,最后做差加一即为结果。
C++:
#include <iostream>
#include <vector>
using namespace std; int GetFirstK(vector<int>& nums, int startpos, int endpos, int k)
{
if(startpos > endpos)
return -; int mid = (startpos + endpos) / ; if(nums[mid] == k)
{
if(mid == || (mid > && nums[mid - ] != k))
return mid;
else
endpos = mid - ;
}
else if(nums[mid] < k)
{
startpos = mid + ;
}
else
{
endpos = mid - ;
} return GetFirstK(nums, startpos, endpos, k);
} int GetLastK(vector<int>& nums, int startpos, int endpos, int k)
{
if(startpos > endpos)
return -; int mid = (startpos + endpos) / ;
int lastpos = nums.size() - ; if(nums[mid] == k)
{
if(mid == lastpos || (mid < lastpos && nums[mid + ] != k))
return mid;
else
startpos = mid + ;
}
else if(nums[mid] < k)
{
startpos = mid + ;
}
else
{
endpos = mid - ;
} return GetLastK(nums, startpos, endpos, k);
} int main()
{
int a[] = {, , , , , , , , , };
vector<int> v(a, a +); cout<<GetLastK(v, , , ) - GetFirstK(v, , , ) + <<endl;
}
【剑指offer 面试题38】数字在排序数组中出现的次数的更多相关文章
- 【剑指offer】题目38 数字在排序数组中出现的次数
		思路: 应该是用二分查找分别找到该数字第一次和最后一次出现的位置,相减即可.O(logn) int findLeft(int a[], int n, int num) { , r = n - ; wh ... 
- 剑指Offer - 九度1349 - 数字在排序数组中出现的次数
		剑指Offer - 九度1349 - 数字在排序数组中出现的次数2013-11-23 00:47 题目描述: 统计一个数字在排序数组中出现的次数. 输入: 每个测试案例包括两行: 第一行有1个整数n, ... 
- 剑指offer(37)数字在排序数组中出现的次数。
		题目描述 统计一个数字在排序数组中出现的次数. 题目分析 这题用暴力解也可以过,不过面试官肯定期待更好的解法. 查找我们最熟悉的就是二分查找了,不过二分查找查找的数在数组中只有一个,我们这里却有很多个 ... 
- 剑指offer三十七之数字在排序数组中出现的次数
		一.题目 统计一个数字在排序数组中出现的次数. 二.思路 解法一:遍历数组计数 解法二:考虑到时有序数组,所以采用分查找,找到第一个K 和 最后一个K的位置, 二者相减. 三.代码 解法一: publ ... 
- 【剑指Offer】37、数字在排序数组中出现的次数
		题目描述: 统计一个数字在排序数组中出现的次数.例如,输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于数字3在该数组中出现了4次,所以函数返回4. 解题思路: 既然输入的数 ... 
- 剑指offer37:统计一个数字在排序数组中出现的次数
		1 题目描述 统计一个数字在排序数组中出现的次数. 2 思路和方法 (1)查找有序数组,首先考虑使用二分查找,使时间复杂度为O(log n).更改二分查找的条件,不断缩小区间,直到区间头和区间尾均为k ... 
- 剑指offer: 38 数字在排序数组中出现的次数
		题目描述 统计一个数字在排序数组中出现的次数.例如输入排序数组{1,2,3,3,3,3,4,5} 和数字3,输出4. 思路如下 1. 预估时间复杂度,最复杂情况是,顺序扫描,统计K出现的次数,时间复杂 ... 
- 【Offer】[53-1] 【数字在排序数组中出现的次数】
		题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 统计一个数字在排序数组中出现的次数.例如,输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在这个数组中出现了4次,因此输出 ... 
- 剑指offer——面试题4:二维数组中的查找
		// 面试题4:二维数组中的查找 // 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按 // 照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个 // 整数 ... 
- 剑指Offer面试题:2.二维数组中的查找
		一.题目:二维数组中的查找 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. ... 
随机推荐
- Spring笔记——配置Hibernate框架事务
			原文:http://www.iteye.com/topic/1123347 Spring配置文件中关于事务配置总是由三个组成部分,DataSource.TransactionManager和代理机制这 ... 
- [vim]vim中有中文乱码
			sudo gedit /etc/vim/vimrc 在文件的最后加上 let &termencoding=&encoding set fileencodings=utf-8,gbk,u ... 
- Java:静态导入
			静态导入 importStatic 当类重名时,需要指定具体的包名. 当方法重名时,需要指定具体的类或对象名. 举例如下: import java.util.*; import static java ... 
- struts2与struts1整合,java.lang.InstantiationException, Exception occurred during processing request: null
			做了2个action,其中一个运行没有问题,另一个报错,看下面的报错信息,再看了看struts.xml,因为没有给GetBooks这个action配置actionform,所以就导致报null.下面是 ... 
- QT 实现彩色图亮度均衡,RGB和HSI空间互相转换
			从昨天折腾到今天.再折腾下去我都要上主楼了 大致和灰度图均衡是一样的,主要是不能像平滑什么的直接对R,G,B三个分量进行.这样出来的图像时没法看的.因此我们要对亮度进行均衡.而HSI彩色空间中的分量 ... 
- Android 手机配office365邮箱
			1. 登录office365邮箱,Settings -> manager apps -> account -> Click "Settings for POP or IMA ... 
- dojo  十  ajax    dojo/_base/xhr
			官方教程:Ajax with DojoAjax功能:1.从服务器加载静态数据2.从web服务中访问xml或json类型的数据3.将表单(form)数据发送到服务器4.刷新页面内容....Ajax在RI ... 
- 如何把双引号包含到echo命令的字符串中
			初涉s h e l l的用户常常会遇到的一个问题就是如何把双引号包含到e c h o命令的字符串中.引号是一个特殊字符,所以必须要使用反斜杠\来使s h e l l忽略它的特殊含义.假设你希望使用e ... 
- 安装 jdk、tomcat
			jdk 下载地址:http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-java ... 
- hdu - 1242 Rescue  && hdu - 2425 Hiking Trip (优先队列+bfs)
			http://acm.hdu.edu.cn/showproblem.php?pid=1242 感觉题目没有表述清楚,angel的朋友应该不一定只有一个,那么正解就是a去搜索r,再用普通的bfs就能过了 ... 
