题目链接:1.统计数字 - 蓝桥云课 (lanqiao.cn)
解题思路:我第一开始想到的是两个for循环,时间复杂度较大,但是也能AC本题,后面看了一下题解发现不用两个for循环,还是太菜了。
下面是c++代码:
我的:
思路就是先排序,输出当前某个数,判断后面有几个数和这个数相同,直到找到不同的数为止,输出多少个数相同,然后跳过相同的数,从另一个数开始循环。
#include <iostream>
#include<algorithm>
using namespace std;
int main()
{
// 请在此输入您的代码
int n, count = 0, arr[200000];
cin >> n;
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
sort(arr, arr + n);
for (int i = 0; i < n; i++) {
count = 0;
cout << arr[i] << " ";
for (int j = i; j < n; j++) {
if (arr[j] != arr[i]) {
break;
}
count++;
}
i += count - 1;
cout << count << endl;
}
return 0;
}
看题解的:
这个思路就简单明了,排序后,每两个数进行判断,相同数量次数就++,不同次数归零,重新找数。
#include <iostream>
#include<algorithm>
using namespace std;
int main()
{
// 请在此输入您的代码
int n, count = 0, arr[200000];
cin >> n;
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
sort(arr, arr + n);
for (int i = 0; i < n; i++) {
count++;
if (arr[i] != arr[i + 1]) {
cout << arr[i] << " " << count << endl;
count = 0;
}
}
return 0;
}