首先,我们需要统计序列a中每个元素出现的次数。\n由于题目要求不使用unordered_map,我们可以使用一个大小为10001的数组来统计元素出现的次数。\n数组的下标表示元素的取值,数组的值表示该元素出现的次数。\n然后,我们遍历数组统计出现次数最多的元素的次数,记为max_count。\n接下来,我们需要判断有多少个元素的出现次数等于max_count。\n我们可以使用一个变量count来记录等于max_count的元素的个数。\n遍历数组,如果某个元素的出现次数等于max_count,则count加1。\n最后,我们需要判断是否存在无穷个众数。\n如果k大于等于max_count,则说明可以对出现次数等于max_count的元素进行k次操作,使其成为众数。\n如果k小于max_count,则说明无法对出现次数等于max_count的元素进行足够多的操作,使其成为众数。\n如果count大于0,则说明存在出现次数等于max_count的元素,因此可能成为众数的数的数量为count。\n如果count等于0,则说明不存在出现次数等于max_count的元素,因此可能成为众数的数的数量为1(即max_count)。\n最后,我们根据以上情况输出结果即可。\n\n以下是完整的C++代码实现:\n\ncpp\n#include <iostream>\nusing namespace std;\\nint main() {\n int n, k;\n cin >> n >> k;\n \n int a[10001] = {0}; // 统计元素出现的次数\n int max_count = 0; // 出现次数最多的元素的次数\n \n for (int i = 0; i < n; i++) {\n int num;\n cin >> num;\n a[num]++;\n max_count = max(max_count, a[num]);\n }\n \n int count = 0; // 出现次数等于max_count的元素的个数\n \n for (int i = 0; i < 10001; i++) {\n if (a[i] == max_count) {\n count++;\n }\n }\n \n if (k >= max_count) {\n cout << count << endl;\n } else {\n cout << 1 << endl;\n }\n \n return 0;\n}\n\n\n时间复杂度分析:\n遍历数组统计元素出现的次数的时间复杂度为O(n)。\n遍历数组统计出现次数最多的元素的次数的时间复杂度为O(10001)。\n遍历数组统计出现次数等于max_count的元素的个数的时间复杂度为O(10001)。\n因此,总的时间复杂度为O(n)。


原文地址: https://www.cveoy.top/t/topic/pOk1 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录