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

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

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/27364557 题目描写叙述: 统计一个数字在排序数组中出现的次数. 输入: 每一个測试案例 ...

  2. 36数字在排序数组中出现的次数

    题目描述 统计一个数字在排序数组中出现的次数. 思路:记住二分搜索的复杂度是O(logn),复杂度的计算方式是主定理.二分搜索模板要记得. 这题要注意没有找到相关元素的返回情况,初始化的时候将两个位置 ...

  3. 剑指Offer值数字在排序数组中出现的次数

    题目描述 统计一个数字在排序数组中出现的次数. 解题思路 看到排序立马想到二分,利用STL的upper_bound与lower_bound处理即可.复杂度是O(log⁡N)O(\log N)O(log ...

  4. 剑指offer——面试题38:数字在排序数组中出现的次数

    剑指offer--面试题38:数字在排序数组中出现的次数 20180906整理 Solution1: [注意]先利用二分查找扎到一个值然后再顺序遍历的做法时间复杂度也是O(n)O(n)O(n),代码也 ...

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

    题目描述 统计一个数字在排序数组中出现的次数. 解题思路 暴力求解,没用到排序的已知条件. class Solution { public:int GetNumberOfK(vector<int ...

  6. 【剑指offer-Java版】38数字在排序数组中出现的次数

    数字在排序数组中出现的次数: 最简单粗暴的方法是O(n^2) 可能的解法可以采用二分,首先根据二分找到给定数字在数组中的位置,然后再左右二分,找到边界(第一个和最后一个),左右边界的差值就是出现次数 ...

  7. 面试题整理11 数字在排序数组中出现的次数

    <剑指offer>面试题38: 题目:统计一个数字在排序数组中出现的次数.例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在此数组中出现了4次,因此输出4. 分析:看到排 ...

  8. 【C语言】数字在排序数组中出现的次数(改动)

    //数字在排序数组中出现的次数(改动) //统计一个数字在排序数组中出现的次数.比如:排序数组{1,2,3,3,3.3,4,5}和数字3,因为3出现了4次,因此输出4. #include <st ...

  9. 剑指Offer(Java版):数字在排序数组中出现的次数

    2019独角兽企业重金招聘Python工程师标准>>> 题目:统计一个数字在排序数组中出现的次数.例如输入排序数组为 {1,2,3,3,,3,3,4,5}和数字3,由于3在这个数组中 ...

  10. 《剑指offer》-- 调整数组顺序使奇数位于偶数前面、顺时针打印矩阵、数字在排序数组中出现的次数

    一.调整数组顺序使奇数位于偶数前面: 1.题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之 ...

最新文章

  1. server 2008 中活动目录的迁移
  2. python ui bs_Guibs的Python学习_列表
  3. VC++ 显示对话框
  4. hadoop Federation搭建
  5. Spring MVC:测试简介
  6. [vim]vim 插件汇总
  7. python history函数_python的history_n 和history函数 获取的成交量和持仓量出现翻倍
  8. 的优缺点_折叠门的优缺点
  9. 利用MFC向导生成单文档应用程序框架
  10. 程序员如何在春节假期避免加班?
  11. 自动化测试selenium(四)check,选中复选框,操作一组元素
  12. Linux 进程服务查看(服务启动时间或运行时间查看)
  13. MATLAB模式识别基本操作函数解析
  14. wps怎么做文档分享
  15. 最新小笑授权系统源码V6.5+开心免授权版
  16. 业聚医疗港交所上市:市值76亿港元 为钱永勋家族企业
  17. iOS开发之在地图上绘制出你运动的轨迹
  18. Efficient Dense Frontier Detection for 2D Graph SLAM Based on Occupancy Grid Submaps
  19. 剑网3一直连接不上服务器,win10系统剑网3连不上服务器的解决方案
  20. Fundamentals of Computer Graphics third/Fourth Edition

热门文章

  1. 王者荣耀英雄分析--孙悟空
  2. super-csv文档的部分翻译及基本使用
  3. 大前端 HTML基础
  4. 二. 再熟悉 Markdown 标准语法
  5. 2021-11-17每日刷题打卡
  6. Window10 WSL2 Linux子系统文件目录路径
  7. 自学软件测试怎么样,有前景吗?
  8. 第四章#4.3哈夫曼树以及案例介绍
  9. 一般app测试的最佳方法
  10. '什么意思 怎么输入