【发布时间】:2011-04-17 10:18:59
【问题描述】:
这是一个简单的程序,用于查找数组中最常出现的元素:
#include <cstdlib>
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char *argv[]) {
int a[] = {1,2,3,4,4,4,5};
int n = sizeof(a) / sizeof(int);
int max = 0;
int result = 0;
int *b = new int[n];
for (int i = 0; i < n; i++) {
b[a[i]] = (b[a[i]] || 0) + 1;
if (b[a[i]] > max) {
max = b[a[i]];
result = a[i];
}
}
cout << result << endl;
system("PAUSE");
return EXIT_SUCCESS;
}
但它不起作用;它打印1。为什么?
【问题讨论】:
-
你能保证数组总是按照你的例子排序吗?或者,你能保证给定元素的所有出现都是连续的吗?如果是这样,则存在具有 O(1) 额外存储空间的更简单、更快的算法。
标签: c++