题目地址: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 数字在排序数组中出现的次数 -- 二分查找的更多相关文章

  1. 九度oj 1349 数字在排序数组中出现的次数

    原题链接:http://ac.jobdu.com/problem.php?pid=1349 二分.. #include<algorithm> #include<iostream> ...

  2. 剑指Offer - 九度1349 - 数字在排序数组中出现的次数

    剑指Offer - 九度1349 - 数字在排序数组中出现的次数2013-11-23 00:47 题目描述: 统计一个数字在排序数组中出现的次数. 输入: 每个测试案例包括两行: 第一行有1个整数n, ...

  3. 【剑指Offer面试编程题】题目1349:数字在排序数组中出现的次数--九度OJ

    题目描述: 统计一个数字在排序数组中出现的次数. 输入: 每个测试案例包括两行: 第一行有1个整数n,表示数组的大小.1<=n <= 10^6. 第二行有n个整数,表示数组元素,每个元素均 ...

  4. 九度OJ 1349:数字在排序数组中出现的次数 (排序、查找)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2489 解决:742 题目描述: 统计一个数字在排序数组中出现的次数. 输入: 每个测试案例包括两行: 第一行有1个整数n,表示数组的大小. ...

  5. 九度oj 题目1349:数字在排序数组中出现的次数

    题目描述: 统计一个数字在排序数组中出现的次数. 输入: 每个测试案例包括两行: 第一行有1个整数n,表示数组的大小.1<=n <= 10^6. 第二行有n个整数,表示数组元素,每个元素均 ...

  6. (剑指Offer)面试题38:数字在排序数组中出现的次数

    题目: 统计一个数字在排序数组中出现的次数. 思路: 1.顺序遍历 顺序扫描一遍数组,统计该数字出现的次数. 时间复杂度:O(n) 2.二分查找 假设我们需要找的数字是k,那么就需要找到数组中的第一个 ...

  7. 剑指offer:数字在排序数组中出现的次数

    题目描述: 统计一个数字在排序数组中出现的次数. 思路分析: 1. 直观思路是直接遍历一遍,统计.复杂度也只要O(n). 2. 显然这道题要考察的内容不这么简单,实际上考虑二分的思想来完成.分别二分查 ...

  8. 剑指Offer面试题:32.数字在排序数组中出现的次数

    一.题目:数字在排序数组中出现的次数 题目:统计一个数字在排序数组中出现的次数.例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在这个数组中出现了4次,因此输出4. 二.解题思路 2 ...

  9. 【剑指offer】数字在排序数组中出现的次数

    2013-09-02 16:28:35 找出数字在排序数组中出现的次数. 注意几点: 一开始试图用size_t类型表示数组的下标begin.end,到那时这样做在end = 0时,end - 1是si ...

随机推荐

  1. java 对视频和图片进行加密解密

    import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java. ...

  2. linux下Memcached安装以及PHP的调用

    一:安装libevent 由于memcached安装时,需要使用libevent类库,所以先安装libevent 1.官网下载:http://libevent.org/ #wget   https:/ ...

  3. Ubuntu下非常给力的下载工具

    Windows下的下载工具--迅雷,之所以下载速度快,乃是它能搜索资源.为己所用,而不是仅仅从原始地址这单一资源处下载. Ubuntu下也有类似的工具,那就是aira2. aira2是一个命令行下载工 ...

  4. Jenkins(二)

    官网:https://wiki.jenkins-ci.org/display/JENKINS/Meet+Jenkins 我的这篇文章不过简单的依据上文,介绍Jenkins提供了哪些功能.详细大家还是要 ...

  5. 使用Unison同步服务器目录

    一.Unison简介Unison是Windows.Linux以及其他Unix平台下都可以使用的文件同步工具,它能使两个文件夹(本地或网络上的)保持内容的一致.Unison拥有与其它一些同步工具或文件系 ...

  6. 在CentOS上编译安装PostgreSQL

    http://my.oschina.net/tashi/blog 第一步:准备阶段 获取必需软件包: CentOS中查看是否安装了某个软件的命令:rpm -qa | grep 软件名.which命令可 ...

  7. js hash字符串转成json

    var a='account.type=1&account.id=&account.dependFlag=0&account.card.companyId=1&acco ...

  8. 认识CoreData-多线程

    CoreData使用相关的技术点已经讲差不多了,我所掌握的也就这么多了.... 在本篇文章中主要讲CoreData的多线程,其中会包括并发队列类型.线程安全等技术点.我对多线程的理解可能不是太透彻,文 ...

  9. iOS之Git的使用

    1.登录Git账号,创建一个新的仓库

  10. Android_Menu_contextMenu

    xml文件: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns ...