2015-10-06 82 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