九度OJ 1349:数字在排序数组中出现的次数 (排序、查找)
来源:互联网 发布:ai人工智能 电影 编辑:程序博客网 时间:2024/04/27 11:02
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:2489
解决:742
- 题目描述:
- 统计一个数字在排序数组中出现的次数。
- 输入:
每个测试案例包括两行:
第一行有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
思路:
先排序,NlogN复杂度。
对每个要查询的数,先查找这个数,然后搜索其左右,得到该数出现的个数,NlogN复杂度。
但该方法的最坏复杂度是MNlogN,如果测试数据不好,时间上无法AC。改进方法:排序后遍历统计每个数的出现个数,另设与原数组同样大小的数组来存储,这样查找到的数就能直接找到出现个数,复杂度MlogN。
代码:
#include <stdio.h>#include <stdlib.h> #define N 1000000#define M 1000 int cmp ( const void *a , const void *b ){ return *(int *)a - *(int *)b;} int main(void){ int n, m, i; int a[N], b[M]; while (scanf("%d", &n) != EOF) { for(i=0; i<n; i++) scanf("%d", &a[i]); scanf("%d", &m); for(i=0; i<m; i++) scanf("%d", &b[i]); qsort(a, n, sizeof(int), cmp); int *p, *ptmp; int count; for(i=0; i<m; i++) { p = (int *)bsearch(&b[i], a, n, sizeof(a[0]), cmp); //printf("find index = %d, key = %d\n", p-a, p[0]); if (p == NULL) count = 0; else count = 1; ptmp = p; if (p != NULL) { p++; while (p - a <= n) { if (*p == b[i]) { p++; count++; } else break; } } //printf("%d\n", count); p = ptmp; if (p != NULL) { p--; while (p - a >= 0) { if (*p == b[i]) { p--; count++; } else break; } } printf("%d\n", count); } } return 0;}/************************************************************** Problem: 1349 User: liangrx06 Language: C Result: Accepted Time:950 ms Memory:8656 kb****************************************************************/
0 0
- 九度OJ 1349:数字在排序数组中出现的次数 (排序、查找)
- 九度OJ 1349 数字在排序数组中出现的次数 -- 二分查找
- [九度oj]题目1349:数字在排序数组中出现的次数
- 九度oj 1349 数字在排序数组中出现的次数
- 九度OJ-题目1349:数字在排序数组中出现的次数
- 【剑指Offer面试编程题】题目1349:数字在排序数组中出现的次数--九度OJ
- 九度笔记之 1349:数字在排序数组中出现的次数
- 题目1349:数字在排序数组中出现的次数-九度
- 【九度】题目1349:数字在排序数组中出现的次数
- 九度 题目1349:数字在排序数组中出现的次数
- 九度_题目1349:数字在排序数组中出现的次数
- [九度OnlineJudge][剑指Offer]题目1349:数字在排序数组中出现的次数
- 九度 题目1349:数字在排序数组中出现的次数
- 数字在排序数组中出现的次数(数组)
- 查找排序数组中数字出现的次数
- 【数组8】数字在排序数组中出现的次数
- 【数组4】数字在排序数组中出现的次数
- 数组9:数字在排序数组中出现的次数
- 翻译工具开发学习札记
- latex configuration
- C++常量折叠
- 最佳调度问题
- layout_centerVertical="true"用法
- 九度OJ 1349:数字在排序数组中出现的次数 (排序、查找)
- 2.6宽带接入技术ADSL
- iOS笔记2
- 学习日记--使用百度地图实现可视化定位
- CXF创建webservice客户端和服务端
- 动态链接库(DLL)总结---动态链接库的创建与使用(5)
- 大鱼吃小鱼游戏-collision.js
- hdu计算机学院大学生程序设计竞赛(2015’11)1008 游乐场
- 302和DNS调度比较