C++ 查找数组中最大的最大值列表

C++ 查找数组中最大的最大值列表,c++,C++,我需要找到数组的第一个最大值列表,然后找到它的中间位置。换句话说,例如,有了这个数组{2,8,8,8,8,8,6,3,8,8,8,8},我需要得到索引3,它是第一个max列表的中间。我确实尝试过,但是我的C++代码仍然缺少一些东西。你能帮忙吗。 谢谢 下面的代码只是一个示例,我正在处理的是一个90个元素的数组 #include <iostream> using namespace std; int main() { int array[] = {2, 8, 8, 8, 8,

我需要找到数组的第一个最大值列表,然后找到它的中间位置。换句话说,例如,有了这个数组{2,8,8,8,8,8,6,3,8,8,8,8},我需要得到索引3,它是第一个max列表的中间。我确实尝试过,但是我的C++代码仍然缺少一些东西。你能帮忙吗。 谢谢

下面的代码只是一个示例,我正在处理的是一个90个元素的数组

#include <iostream>
using namespace std;
int main()
{ 
    int array[] = {2, 8, 8, 8, 8, 8, 6, 8, 0};
    int Max = 0;
    int StartMax = 0, EndMax = 0;

    for (int m = 0 ; m < 9 ; m++){

        if(array[m] > Max){
            Max = array[m];
            StartMax = m;
            EndMax = m;
            cout << "array[m] > Max " << Max << endl;
        }

        else if(array[m] < Max){
            cout << "array[m] < Max " << Max << endl;
        }

        else { 
            int a = array[m] - array[m-1];
            cout << "a = " << a << endl;

            if (a == 0){ 
                cout << "a = " << a << endl;
                EndMax = m;
            }
        }
    }
    cout << "Index of Max : " << ((StartMax+EndMax)/2) << endl; 
}
#包括
使用名称空间std;
int main()
{ 
int数组[]={2,8,8,8,8,8,8,6,8,0};
int Max=0;
int StartMax=0,EndMax=0;
对于(int m=0;m<9;m++){
if(数组[m]>最大值){
最大值=阵列[m];
StartMax=m;
EndMax=m;
解决问题
您的代码适用于本例,但当您有第二个包含2个以上元素的“最大列表”时,它将不起作用

实际上,使用
数组[]={2,8,8,8,8,6,8,8};
(注意最后8个)
我们得到的结果是:
middle=4
而不是
middle3
,因为当您再次遇到
8
时,您会进入此分支条件:

else { 
   int a = array[m] - array[m-1];
如果(a==0),则输入分支
,并将
EndMax
设置到数组的末尾!
StartMax=1
Endmax=8
因此
middle=4
这不是你想要的

解决方案 我建议使用布尔跟踪程序来管理:

size_t give_middle_max_list(const std::vector<int>& v) {
    size_t idx_start_max = 0;
    size_t idx_end_max = 0;
    int max_val = v[0];
    bool should_continue = false;

    for(size_t i = 1; i < v.size(); i ++) {
        if(v[i] > max_val) {
            max_val = v[i];
            idx_start_max = i;
            idx_end_max = i;
            should_continue = true;
        }
        else {
            if (v[i] == max_val && should_continue == true) {
                idx_end_max = i;   // I am still in the first max list 
            }
            else {
                should_continue = false; // I am not in the first max list anymore !
            }
        }
    }
    std::cout << idx_start_max << ";" << idx_end_max << std::endl;
    return (idx_end_max + idx_start_max) / 2;
}
size\u t给出中间最大列表(const std::vector&v){
大小\u t idx\u开始\u最大值=0;
尺寸=0;
int max_val=v[0];
bool should_continue=false;
对于(size_t i=1;i最大值){
max_val=v[i];
idx_start_max=i;
idx_end_max=i;
是否继续=正确;
}
否则{
如果(v[i]==max\u val&&should\u continue==true){
idx_end_max=i;//我仍然在第一个max列表中
}
否则{
should\u continue=false;//我不再在第一个最大值列表中了!
}
}
}

什么是“最大列表”?代码有什么问题?什么是“第一个最大列表”它看起来和你描述的一模一样。你是在寻找第一个或最大的最大值列表吗?我想这个链接中的代码是我的,因为我使用的是在线编译器!!@fjardon是的,我现在很困惑,我引用OP:
我需要找到数组的第一个最大值列表,并找到它的中间位置。OP你想要什么?