【发布时间】:2020-03-21 18:58:52
【问题描述】:
问题:找到 2 个东西
- 给定的未排序整数数组中的最高出现次数
- 出现率最高的元素和如果有多个元素满足(出现率最高的相同) 结果是最小的元素。
请尽可能简单地解决问题,不要使用指针或任何高级容器,如 hashtable、pair 或 map(我是初学者)
例如:
{1, 2, 8, 2, 5, 0, 5}
答案是 2 和 2(元素 2 和 5 都出现两次,但 2 是最小的)
这里是代码,但它只找到最高出现的权利。
int A[] = {1, 2, 8, 2, 5, 0, 5};
int N = 7;
int maxCount = 0;
int minMode = 0;
for (int i = 0; i <= N - 1; i++) {
int count = 0;
for (int j = 0; j <= N - 1; j++) {
if (A[i] == A[j])
count++;
}
if (count >= maxCount)
{
maxCount = count;
minMode = A[i];
}
}
cout << maxCount << " " << minMode << endl;
【问题讨论】:
-
使用地图并不是真正的“高级”,而是使用
std::map使其尽可能简单。 -
我们这里有点语言问题:“出现次数最多”和“出现次数最多的元素”有什么区别?
-
@idclev 显然,这是某种家庭作业或测试,其中包含此要求是为了确保所有参与者都在平等的基础上进行游戏,并且他们确实了解如何解决问题无需使用一些现成的工具,这些工具会在他们不了解其工作原理的情况下通过魔术为他们完成所有工作。
-
@MikeNakis 这就是猜测。 OP 明确指出要避免使用地图,因为他们认为它是“高级的”并且想要一个“简单”的解决方案。这个前提是错误的,因为使用地图 很简单。如果这是一个硬性要求,则应在问题中说明
-
@MikeNakis 非常感谢,但你能建议编辑一下吗?
标签: c++ arrays algorithm integer find-occurrences