九度OJ 1349 数字在排序数组中出现的次数 -- 二分查找
题目地址:http://ac.jobdu.com/problem.php?pid=1349
- 题目描述:
-
统计一个数字在排序数组中出现的次数。
- 输入:
-
每个测试案例包括两行:
第一行有1个整数n,表示数组的大小。1<=n <= 10^6。
第二行有n个整数,表示数组元素,每个元素均为int。
第三行有1个整数m,表示接下来有m次查询。1<=m<=10^3。
下面有m行,每行有一个整数k,表示要查询的数。
- 输出:
-
对应每个测试案例,有m行输出,每行1整数,表示数组中该数字出现的次数。
- 样例输入:
-
81 2 3 3 3 3 4 513
- 样例输出:
-
4
#include <stdio.h>
typedef struct timesofdata{
int data;
int times;
}TimesOfData;
int Bsearch (TimesOfData hash[], int start, int end, int k){
int mid;
while (start <= end){
mid = (start + end) / 2;
if (hash[mid].data < k)
start = mid + 1;
else if (hash[mid].data > k)
end = mid - 1;
else
return hash[mid].times;
}
return 0;
}
int main(void){
int n;
int input;
TimesOfData hash[1000000];
int m;
int k;
int i;
int j;
int pre;
int flag;
while (scanf ("%d", &n) != EOF){
for (i=0, j=-1; i<n; ++i){
scanf ("%d", &input);
if (i == 0 || input != pre){
++j;
hash[j].data = input;
hash[j].times = 1;
pre = input;
}
else{
++hash[j].times;
}
}
scanf ("%d", &m);
while (m-- != 0){
scanf ("%d", &k);
printf ("%d\n", Bsearch (hash, 0, j, k));
}
}
return 0;
}
#include <stdio.h>
int Bsearch (int data[], int start, int end, int k){
int mid;
while (start <= end){
mid = (start + end) / 2;
if (data[mid] < k)
start = mid + 1;
else if (data[mid] > k)
end = mid - 1;
else
return mid;
}
return -1;
}
int main(void){
int n;
int input[1000000];
int m;
int k;
int i;
int index;
int num;
while (scanf ("%d", &n) != EOF){
for (i=0; i<n; ++i){
scanf ("%d", &input[i]);
}
scanf ("%d", &m);
while (m-- != 0){
scanf ("%d", &k);
index = Bsearch (input, 0, n-1, k);
if (index == -1)
printf ("0\n");
else{
num = 1;
i = index - 1;
while (i >= 0 && input[i--] == k)
++num;
i = index + 1;
while (i < n && input[i++] == k)
++num;
printf ("%d\n", num);
}
}
}
return 0;
}
本以为主要考的是哈希表才有了第一个程序,谁知却是考的二分查找,呵呵……
九度OJ 1349 数字在排序数组中出现的次数 -- 二分查找的更多相关文章
- 九度oj 1349 数字在排序数组中出现的次数
原题链接:http://ac.jobdu.com/problem.php?pid=1349 二分.. #include<algorithm> #include<iostream> ...
- 剑指Offer - 九度1349 - 数字在排序数组中出现的次数
剑指Offer - 九度1349 - 数字在排序数组中出现的次数2013-11-23 00:47 题目描述: 统计一个数字在排序数组中出现的次数. 输入: 每个测试案例包括两行: 第一行有1个整数n, ...
- 【剑指Offer面试编程题】题目1349:数字在排序数组中出现的次数--九度OJ
题目描述: 统计一个数字在排序数组中出现的次数. 输入: 每个测试案例包括两行: 第一行有1个整数n,表示数组的大小.1<=n <= 10^6. 第二行有n个整数,表示数组元素,每个元素均 ...
- 九度OJ 1349:数字在排序数组中出现的次数 (排序、查找)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2489 解决:742 题目描述: 统计一个数字在排序数组中出现的次数. 输入: 每个测试案例包括两行: 第一行有1个整数n,表示数组的大小. ...
- 九度oj 题目1349:数字在排序数组中出现的次数
题目描述: 统计一个数字在排序数组中出现的次数. 输入: 每个测试案例包括两行: 第一行有1个整数n,表示数组的大小.1<=n <= 10^6. 第二行有n个整数,表示数组元素,每个元素均 ...
- (剑指Offer)面试题38:数字在排序数组中出现的次数
题目: 统计一个数字在排序数组中出现的次数. 思路: 1.顺序遍历 顺序扫描一遍数组,统计该数字出现的次数. 时间复杂度:O(n) 2.二分查找 假设我们需要找的数字是k,那么就需要找到数组中的第一个 ...
- 剑指offer:数字在排序数组中出现的次数
题目描述: 统计一个数字在排序数组中出现的次数. 思路分析: 1. 直观思路是直接遍历一遍,统计.复杂度也只要O(n). 2. 显然这道题要考察的内容不这么简单,实际上考虑二分的思想来完成.分别二分查 ...
- 剑指Offer面试题:32.数字在排序数组中出现的次数
一.题目:数字在排序数组中出现的次数 题目:统计一个数字在排序数组中出现的次数.例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在这个数组中出现了4次,因此输出4. 二.解题思路 2 ...
- 【剑指offer】数字在排序数组中出现的次数
2013-09-02 16:28:35 找出数字在排序数组中出现的次数. 注意几点: 一开始试图用size_t类型表示数组的下标begin.end,到那时这样做在end = 0时,end - 1是si ...
随机推荐
- iOS_城市定位
技术点-利用CoreLoaction框架,实现城市定位功能. 原理: 利用苹果官方提供的CoreLocation框架实现城市定位的功能: 该框架主要包括两个比较有用的类:定位类CLLocationMa ...
- NSThead
每个iOS应用程序都有个专门用来更新显示UI界面.处理用户的触摸事件的主线程,因此不能将其他太耗时的操作放在主线程中执行,不然会造成主线程堵塞(出现卡机现象),带来极坏的用户体验.一般的解决方案就是将 ...
- 用intent打开各种类型文件
public class MyIntent { //android获取一个用于打开HTML文件的intent public static Intent getHtmlFileIntent( Strin ...
- unity3d NGUI多场景共用界面制作
1创建单独编辑UI的unity场景 UIScene.unity 用来做UI面界 ,创建Resources文件存放UI界面的prefab,代码里动态load资源仅仅能从Resources目录载入 2创建 ...
- EntityFramework小知识
Entity Framework 应用程序有以下优点: 1 应用程序可以通过更加以应用程序为中心的概念性模型(包括具有继承性.复杂成员和关系的类型)来工作. 2 应用程序不再对特定的数据引擎或存储架构 ...
- spring源码分析之spring-web http详解
spring-web是spring webmvc的基础,它的功能如下: 1. 封装http协议中client端/server端的request请求和response响应及格式的转换,如json,rss ...
- Maven项目中如何添加日志
- check_area
CCTouch* pTouch = ...; CCSprite* pSprite = ...; CCRect rect = pSprite ->boundingBox(); if ((& ...
- android开发之路01
一.android系统被分为4个层次:1.最下层的是linux核心,包括多个驱动程序,提供了操作系统应该具备的核心功能:2.在linux核心之上,包括两个部分,一部分是Android Runtime( ...
- ListVIew中插入view
public class MainActivity extends Activity { private ListView listview; private List<String> d ...