数组中的最大连续重复次数

时间:2015-09-30 06:53:58

标签: c++ arrays

我想计算数组中的最大连续值。在下面,它返回我4.似乎阵列中的所有真理都加起来了。我的工作有什么问题?这是我的代码。

int main()
{
int maxCount = 0;
bool list[7];
list[0] = true;
list[1] = true;
list[2] = false;
list[3] = false;
list[4] = true;
list[5] = true;
list[6] = false;

for (int i = 0; i < 6; i++)
{
    int count = 0;
    if (list[i]==true)
    {
        count++;
        for (int j = i + 1; j < 7; j++)
        {
            if (list[j]== list[i])
            {
                count++;
            }
        }
    }
    if (count > maxCount)
    {
        maxCount = count;
    }
}
cout << maxCount << endl;
}

4 个答案:

答案 0 :(得分:1)

您实施的方式完全错误。您正在添加数组中的所有true条目,而不考虑它们之间的false

这样做:

int currentCount = 0, maxCount = 0;
for (int i = 0; i < 7; ++i)
{
    // arr is the name of the array
    if(arr[i])    ++currentCount;
    else    currentCount = 0;  // resetting to zero if false encountered
    maxCount = ( (currentCount > maxCount) ? currentCount : maxCount );
}
cout << maxCount << endl;

答案 1 :(得分:0)

最好再次考虑countmaxCount之间的关系。

int maxCount = 0;
int count = 0;
int size = sizeof(list) / sizeof(bool);
for (int i = 0; i < size; i++) {
    if (list[i]==true) {
        count++;
    } else {
        if (count > maxCount) {
            maxCount = count;
        }
        count = 0;
    }
}
if (count > maxCount) {
    maxCount = count;
}
cout << maxCount << endl;

LIVE

答案 2 :(得分:0)

打破真/假的变化并小心最后的真实

#include <iostream>

int main()
{
    using namespace std;

    int maxCount = 0;
    bool list[7];
    list[0] = true;
    list[1] = true;
    list[2] = false;
    list[3] = false;
    list[4] = true;
    list[5] = true;
    list[6] = false;

    for (int i = 0; i < 7; i++) // be careful last true
    {
       int count = 0;
       if (list[i]==true)
       {
           count++;
           for (int j = i + 1; j < 7; j++)
           {
               if (list[j]== list[i])
               {
                   count++;
               }
               else
               {
                   break; // true / false transition
               }
           }
        }
        if (count > maxCount)
        {
            maxCount = count;
        }
    }
    cout << maxCount << endl;
}

答案 3 :(得分:0)

您应该只使用一次遍历数组,但使用两个计数器:

  • 首先是当前的真实值条纹
  • 最高连胜第二名

每次遇到 false 时,当前条纹计数器会重置为零,每次遇到 true 时,都会增加当前条纹的值并检查它是否更高比最高条纹计数器,如果是,请更新它。