我有数字向量 std :: vector numbers; 如何找到像参数一样传递的一些数字的最大序列? 例如,如果我喜欢 0,1,1,3,2,0,0,0,6,0,0 我正在寻找 0 数字,我需要在这种情况下获得起始索引 5 。 对于此问题,是否已经在 stl 或提升中实现了一些功能或组合? (我不能使用C ++ 11)
答案 0 :(得分:1)
当你在每个成员上进行迭代时,我认为你做的不如蛮力计算向量中的运行。
答案 1 :(得分:1)
是否真的有必要使用lib函数吗?
一个简单的方法 - 我手边没有看到任何更有效的方法 - 就是选择第一个数字并计算它,只要它按顺序出现。
如果出现另一个号码,则计算它直到另一个号码出现,然后将最后一个号码的频率与刚刚计算的频率进行比较,始终保持频率最高的频率,直到达到结束时列表 - 或者直到你可以确认,鉴于列表的大小,以及你在列表中的位置,没有数字可以比你最常见的数字更频繁。
答案 2 :(得分: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;
}