题目:
示例1:
输入:
10 499 498 500 500 497 495 496 496 492 233 |
输出:
233 1 492 1 495 1 496 2 497 1 498 1 499 1 500 2 |
思路:
可以开辟整型数组,利用 分数 作为下标,统计次数,即可无需特意的给它排序而导致运行超时问题,直接开始从小到大进行遍历输出即可
根据思路 易错误源码:
#include <bits/stdc++.h>
using namespace std;
int n, minx = 1e8, maxx = -1;
vector<int>num(501, 0);
int main()
{
//freopen("a.txt","r",stdin);
cin >> n;
while (n--) {
int temp;
cin >> temp;
if (temp < minx) //寻找遍历最低临界点,减少多余的遍历,提高运行效率
minx = temp;
if (temp > maxx) //寻找遍历最高临界点,减少多余的遍历,提高运行效率
maxx = temp;
num[temp]++;
}
for (int i = minx; i <= maxx; i++) {
if (num[i])
cout << i << ' ' << num[i] << endl;
}
return 0;
}
结果我们发现:
之后,我又不断的换思路,结合set模板库,map模板库,什么的。
最后,听大佬的指点后,才知道....
cin 和 cout 优点:输入方便,快捷 缺点:效率低,运行速度慢 scanf 和 printf 优点:相比cin 和 cout 效率高,运行速度快些 缺点:输入麻烦一丢丢 当题目中有大量的测试数据,由于cin,cout 输入和输出慢,可能导致TLE,所以这种情况下应使用 scanf 、 printf |
此刻我的内心:
所以正确的源码是:
#include <bits/stdc++.h>
using namespace std;
int n, minx = 1e8, maxx = -1;
vector<int>num(501, 0);
int main()
{
//freopen("a.txt","r",stdin);
scanf("%d", &n);
while (n--) {
int temp;
scanf("%d", &temp);
if (temp < minx)
minx = temp;
if (temp > maxx)
maxx = temp;
num[temp]++;
}
for (int i = minx; i <= maxx; i++) {
if (num[i])
printf("%d %d\n", i, num[i]);
}
return 0;
}