九度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;elsereturn 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;elsereturn 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 数字在排序数组中出现的次数 -- 二分查找相关推荐
- 【剑指offer】数字在排序数组中出现的次数
转载请注明出处:http://blog.csdn.net/ns_code/article/details/27364557 题目描写叙述: 统计一个数字在排序数组中出现的次数. 输入: 每一个測试案例 ...
- 36数字在排序数组中出现的次数
题目描述 统计一个数字在排序数组中出现的次数. 思路:记住二分搜索的复杂度是O(logn),复杂度的计算方式是主定理.二分搜索模板要记得. 这题要注意没有找到相关元素的返回情况,初始化的时候将两个位置 ...
- 剑指Offer值数字在排序数组中出现的次数
题目描述 统计一个数字在排序数组中出现的次数. 解题思路 看到排序立马想到二分,利用STL的upper_bound与lower_bound处理即可.复杂度是O(logN)O(\log N)O(log ...
- 剑指offer——面试题38:数字在排序数组中出现的次数
剑指offer--面试题38:数字在排序数组中出现的次数 20180906整理 Solution1: [注意]先利用二分查找扎到一个值然后再顺序遍历的做法时间复杂度也是O(n)O(n)O(n),代码也 ...
- 剑指offer:数字在排序数组中出现的次数
题目描述 统计一个数字在排序数组中出现的次数. 解题思路 暴力求解,没用到排序的已知条件. class Solution { public:int GetNumberOfK(vector<int ...
- 【剑指offer-Java版】38数字在排序数组中出现的次数
数字在排序数组中出现的次数: 最简单粗暴的方法是O(n^2) 可能的解法可以采用二分,首先根据二分找到给定数字在数组中的位置,然后再左右二分,找到边界(第一个和最后一个),左右边界的差值就是出现次数 ...
- 面试题整理11 数字在排序数组中出现的次数
<剑指offer>面试题38: 题目:统计一个数字在排序数组中出现的次数.例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在此数组中出现了4次,因此输出4. 分析:看到排 ...
- 【C语言】数字在排序数组中出现的次数(改动)
//数字在排序数组中出现的次数(改动) //统计一个数字在排序数组中出现的次数.比如:排序数组{1,2,3,3,3.3,4,5}和数字3,因为3出现了4次,因此输出4. #include <st ...
- 剑指Offer(Java版):数字在排序数组中出现的次数
2019独角兽企业重金招聘Python工程师标准>>> 题目:统计一个数字在排序数组中出现的次数.例如输入排序数组为 {1,2,3,3,,3,3,4,5}和数字3,由于3在这个数组中 ...
- 《剑指offer》-- 调整数组顺序使奇数位于偶数前面、顺时针打印矩阵、数字在排序数组中出现的次数
一.调整数组顺序使奇数位于偶数前面: 1.题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之 ...
最新文章
- server 2008 中活动目录的迁移
- python ui bs_Guibs的Python学习_列表
- VC++ 显示对话框
- hadoop Federation搭建
- Spring MVC:测试简介
- [vim]vim 插件汇总
- python history函数_python的history_n 和history函数 获取的成交量和持仓量出现翻倍
- 的优缺点_折叠门的优缺点
- 利用MFC向导生成单文档应用程序框架
- 程序员如何在春节假期避免加班?
- 自动化测试selenium(四)check,选中复选框,操作一组元素
- Linux 进程服务查看(服务启动时间或运行时间查看)
- MATLAB模式识别基本操作函数解析
- wps怎么做文档分享
- 最新小笑授权系统源码V6.5+开心免授权版
- 业聚医疗港交所上市:市值76亿港元 为钱永勋家族企业
- iOS开发之在地图上绘制出你运动的轨迹
- Efficient Dense Frontier Detection for 2D Graph SLAM Based on Occupancy Grid Submaps
- 剑网3一直连接不上服务器,win10系统剑网3连不上服务器的解决方案
- Fundamentals of Computer Graphics third/Fourth Edition