簡體   English   中英

在數組中查找最大的 Max 列表

[英]Find largest Max list in an array

我需要找到數組的第一個 Max 列表並找到它的中間位置。 換句話說,例如有這個數組 {2, 8, 8, 8, 8, 8, 6, 3, 8, 8, 8} 我需要得到索引 3,它是第一個的中間最大列表。 我確實嘗試過,但我的 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; 
}

問題

您的代碼適用於此示例,但當您有第二個包含 2 個以上元素的“最大列表”時,它將不起作用。

確實與array[] = {2, 8, 8, 8, 8, 8, 6, 8, 8}; (注意最后8個)
我們得到的結果是: middle=4而不是middle3因為當你再次遇到8時進入這個分支條件:

else { 
   int a = array[m] - array[m-1];

然后你進入分支if (a==0)並將EndMax設置為數組的末尾!
StartMax = 1Endmax = 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;
}

實時代碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM