【发布时间】:2021-11-22 15:43:55
【问题描述】:
例如,我有向量 {'a','a','b','b','c'} 并且我想获得最多的字母,即 a 和 b,但此代码输出为 a;
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
int getMostFrequentElement(std::vector<char> &arr)
{
if (arr.empty())
return -1;
std::sort(arr.begin(), arr.end());
auto last_int = arr.front();
auto most_freq_int = arr.front();
int max_freq = 0, current_freq = 0;
for (const auto &i : arr) {
if (i == last_int)
++current_freq;
else {
if (current_freq > max_freq) {
max_freq = current_freq;
most_freq_int = last_int;
}
last_int = i;
current_freq = 1;
}
}
if (current_freq > max_freq) {
max_freq = current_freq;
most_freq_int = last_int;
}
return most_freq_int;
}
int main(){
std::vector<char> arr = {'a','a','b','b','c'};
char ret = getMostFrequentElement(arr);
std::cout << "Most frequent element = " << ret;
}
我可以知道为什么我的输出变成 a 而不是 a 和 b 吗?
输入向量 arr{'a','a','b','b','c'} 预期输出是 a 和 b
但我的输出是一个
【问题讨论】:
-
Team up with this asker。你们有很多共同点,就连代码都一样。
-
TL;DR 版本:不能指望返回一个值的函数不经过修改就返回两个值。
-
“我可以知道为什么我的输出变成 a 而不是 a 和 b 吗?” 其他人写了这段代码吗?很难想象你写了这段代码,期望
char ret的值是"a and b"。 -
在家庭作业上作弊可能会让你通过课程,但你认为如果你试图找到一份工作,人们不会弄明白的。作弊不会教你编程。
-
这段代码似乎是从here 中提取的,经过了一些改进以使用
char而不是int。
标签: c++ algorithm vector frequency function-definition