c++实现判断数组中出现最多的数,有几次
时间: 2024-03-21 21:43:20 浏览: 89
可以使用哈希表(unordered_map)来统计每个数出现的次数,然后找出出现次数最多的数。具体实现如下:
```c++
#include <iostream>
#include <unordered_map>
using namespace std;
int main() {
int arr[] = {1, 2, 3, 2, 2, 3, 4, 5, 2, 2};
int n = sizeof(arr) / sizeof(arr[0]);
unordered_map<int, int> freq;
int max_num = arr[0], max_freq = 0;
for (int i = 0; i < n; ++i) {
freq[arr[i]]++;
if (freq[arr[i]] > max_freq) {
max_num = arr[i];
max_freq = freq[arr[i]];
}
}
cout << "出现最多的数是 " << max_num << ",出现了 " << max_freq << " 次" << endl;
return 0;
}
```
输出结果为:
```
出现最多的数是 2,出现了 6 次
```
注意,如果有多个数出现次数相同且均为最大值,则此程序只会输出其中一个。如果需要输出所有出现次数最多的数,则需要稍作修改。
相关问题
给定一个长度为 n 的整数数组 a1,a2,…,an ,数组中的每个元素都是一个 1∼n 之间的整数。 我们规定,数组中出现次数最多的元素为数组的核心元素,例如数组 [1,1,1,2,3] 的核心元素为 1 。 此外,如果数组中出现次数最多的元素不唯一,则出现次数最多的元素中数值最小的那个元素为数组的核心元素,例如数组 [1,2,2,3,3] 的核心元素为 2 。 对于 1≤i≤n 的每个整数 i ,请你计算有多少个给定数组的非空连续子数组的核心元素为 i 。 c++实现
以下是 C++ 的实现代码:
```cpp
#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
int max_cnt = 0, core = 0;
unordered_map<int, int> cnt;
for (int x : a) {
cnt[x]++;
if (cnt[x] > max_cnt || (cnt[x] == max_cnt && x < core)) {
max_cnt = cnt[x];
core = x;
}
}
unordered_map<int, int> cur_cnt;
int ans = 0;
for (int i = 0; i < n; i++) {
if (a[i] == core) {
cur_cnt[a[i]]++;
} else {
cur_cnt[a[i]]--;
if (cur_cnt[a[i]] == 0) {
cur_cnt.erase(a[i]);
}
}
int max_cnt = 0;
for (auto p : cur_cnt) {
max_cnt = max(max_cnt, p.second);
}
if (max_cnt == cur_cnt[core]) {
ans++;
}
}
for (int i = 1; i <= n; i++) {
if (i != core) {
cout << 0 << endl;
} else {
cout << ans << endl;
}
}
return 0;
}
```
其中,第 4 行到第 13 行遍历数组,用哈希表统计每个元素出现的次数,并找出出现次数最多的元素。
第 15 行到第 30 行针对每个可能的核心元素,从左到右遍历数组,维护一个当前连续子数组的哈希表,记录每个元素在当前连续子数组中出现的次数。同时,维护一个计数器 count,记录当前连续子数组中出现次数最多的元素的出现次数。每次更新完哈希表后,判断出现次数最多的元素是否为当前核心元素,如果是,则将当前连续子数组中以当前元素结尾的子数组的个数加入到以当前核心元素结尾的子数组的个数中。
最后,第 32 行到第 38 行输出每个可能的核心元素的以该元素结尾的子数组的个数。
C++用cin输入一个整数指针数组,最多32个数字,回车表示输入结束
好的,我可以通过下面的代码来实现这个功能:
```c++
#include <iostream>
using namespace std;
int main() {
int *arr = new int[32]; // 动态申请一个长度为32的整型数组
int count = 0; // 记录输入的数字个数
while (cin >> arr[count]) { // 循环读入数字,并判断是否读到了文件结尾
count++; // 统计输入的数字个数
if (count >= 32) { // 如果输入的数字个数达到了32个,则退出循环
break;
}
}
// 输出输入的数字
for (int i = 0; i < count; i++) {
cout << arr[i] << " ";
}
cout << endl;
delete [] arr; // 释放掉申请的内存空间
return 0;
}
```
这段代码会动态申请一个长度为32的整型数组,然后通过循环不断读取输入的数字,并统计输入的数字个数。如果输入的数字个数达到了32个,则退出循环。最后输出输入的数字,并释放掉申请的内存空间。
阅读全文