酷代码 AI
菜单
服务商

小核桃的数学挑战:用 C++ 求解数组连续子数组众数出现次数问题

```cpp #include <iostream> #include <vector> #include <unordered_map> 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]; } long long ans = 0; // 枚举所有子数组 for (int i = 0; i < n; i++) { unordered_map<int, int> freq; // 记录每个数字出现的次数 int maxFreq = 0; // 当前子数组的众数出现次数 for (int j = i; j < n; j++) { freq[a[j]]++; maxFreq = max(maxFreq, freq[a[j]]); if (maxFreq >= k) { ans++; } } } cout << ans << endl; return 0; } ``` 代码说明: - 使用双重循环枚举所有子数组 `a[i..j]`。 - 用哈希表 `freq` 统计子数组中每个数字的出现次数。 - 变量 `maxFreq` 记录当前子数组的众数出现次数。 - 如果 `maxFreq >= k`,答案加一。 - 时间复杂度为 O(n²),适合 n 较小的情况(如 n ≤ 2000)。 - 对于更大的 n,需要优化算法,例如使用分治或双指针技巧。 ######[AI问答 | 320点数解答 | 2026-01-20 19:16:17]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]