重写,不要用unordered_map
时间: 2023-07-17 11:13:28 浏览: 37
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n, k;
cin >> n >> k;
vector<int> a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
sort(a.begin(), a.end());
int maxFrequency = 1;
int count = 1;
int possibleCount = 1;
for (int i = 1; i < n; i++) {
if (a[i] == a[i-1]) {
count++;
maxFrequency = max(maxFrequency, count);
} else {
count = 1;
}
}
for (int i = 1; i < n; i++) {
if (a[i] != a[i-1]) {
int diff = a[i] - a[i-1];
if (diff <= k && count + diff >= maxFrequency) {
possibleCount += diff - 1;
}
}
}
cout << possibleCount << endl;
return 0;
}
```
这个解法首先对序列进行排序,然后遍历序列,统计相邻相同数字的个数,并找出最大的出现次数 `maxFrequency`。然后再遍历序列,计算两个相邻不同数字之间的差值 `diff`,如果 `diff` 小于等于 `k` 且当前出现次数加上 `diff` 大于等于 `maxFrequency`,则将 `possibleCount` 增加 `diff - 1`,表示该差值范围内的数字都可以成为众数。最后输出 `possibleCount`。