我有数字向量 std::vector numbers; 如何找到像参数一样传递的某个数字的最大序列?例如,如果我喜欢0, 1, 1 , 3 , 2 , 0 , 0, 0, 6 , 0 , 0 并且我正在寻找0数字,在这种情况下我需要获取起始索引5 。是否已经有一些功能或组合可以在stl或boost中实现这个问题?(我不能使用 C++11)
问问题
151 次
3 回答
1
真的有必要为此使用lib函数吗?
一个简单的方法——我没有看到任何更有效的方法——选择第一个数字并计算它,只要它按顺序出现。
如果出现另一个数字,则一直数到另一个数字出现,然后将最后一个的频率与刚刚计数的频率进行比较,始终保持频率最高的一个,并这样做直到到达列表的末尾- - 或者直到您可以确认,鉴于列表的大小以及您在列表中的位置,在序列中,没有任何数字比您已经拥有的最频繁的数字更频繁。
于 2012-11-18T00:38:25.310 回答
1
我认为没有标准函数可以为您执行此操作,但您可以为它编写一个相对简单的算法:
int max_len = -1;
int best_index = -1;
int count = 0;
vector<int> data;
int value;
// Set the data and value here...
for (int i = 0 ; i != data.size() ; i++) {
if (data[i] == value) {
count++;
} else {
if (count > max_len) {
best_index = i - count;
max_len = count;
}
count = 0;
}
}
if (count > max_len) {
best_index = i - count;
max_len = count;
}
于 2012-11-18T00:43:23.033 回答
1
我认为你不会比在遍历每个成员时对向量中的运行进行蛮力计数更好。
于 2012-11-18T00:37:03.347 回答