2015-10-06 77 views
-1

我需要找到數組的第一個Max列表並找到它的中間。換句話說,例如,具有這個數組{2,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; 
} 
+6

什麼是 「最大單」?你的代碼有什麼問題? – interjay

+0

什麼是「第一個最大列表」 –

+1

它看起來完全如您所描述。 http://ideone.com/NL7qen – drescherjm

回答

1

問題

您的代碼工作,在這個例子中,但是當你有擁有超過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 這不是你想要的!

Live Code

解決方案

我會建議使用一個布爾跟蹤器來管理,而不是:

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; 
} 

Live code

+0

嗯標題說:*最大*但問題說:*第一*最大列表... – fjardon

+1

@fjardon是我現在很困惑我引用OP:'我需要找到一個數組的第一個最大列表,並找到它的中間'。 OP你想要什麼? – coincoin