九度OJ 1349:数字在排序数组中出现的次数 (排序、查找)
2024-09-29 11:02:52
时间限制: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
****************************************************************/
最新文章
- 让IE6/IE7/IE8浏览器支持CSS3属性
- Eclipse不显示项目栏
- MVC 微信支付
- Linux访问Windows磁盘实现共享
- 由CAST()函数在.NET1.1和.NET4.0下处理机制不同所引发的BUG
- Android消息推送完美解决方案全析
- div背景图片或颜色不显示的解决办法
- C#开发Windows窗体应用程序的步骤
- AtCoder Grand Contest 019
- [LeetCode] Cracking the Safe 破解密码
- TensorFlow学习笔记(MNIST报错修正 适用Tensorflow1.3)
- 根据dateFormatter创建NSDate类型数据
- ASP.NET Core 2.1中基于角色的授权
- 自动化测试基础篇--Selenium中JS处理滚动条
- struts2框架之请求参数(参考第二天学习笔记)
- Python数据分析--Pandas知识点(三)
- java 浮点运算
- grid响应式布局
- xStream转换XML、JSON
- TZOJ 4746 Xiangqi(模拟棋盘数组)
热门文章
- Java程序IP v6与IP v4的设置
- idea 热部署
- Oracle 数据库监听配置
- 关于八数码问题中的状态判重的三种解决方法(编码、hash、&;lt;set&;gt;)
- Odoo 8,9,10 制造领料、入库 实践
- 工作总结 用, 隔开数据 后台不可以用 List<;string>; 接收 get请求直接通过浏览器发请求传数组或者list到后台
- .Net开发复习与总结
- android ListView滚动条监听判断滚动到底部还是顶部
- 【已解决】WebUploader 0.1.5 安卓手机不能访问相机、IOS直接访问相机 的问题
- java线程模型Master-Worker