查找索引0替换为1,以获得C ++中二进制数组中最长的连续序列1s

假设我们有N个元素的数组。这些元素为0或1。找到要替换为1的0的位置,以获得最长的1s连续序列。假设数组类似于arr = [1、1、0、0、1、0、1、1、1、0、1、1、1],输出索引为9。将索引9的0替换为1会导致最大连续序列1s

我们必须跟踪三个索引。当前索引(curr),先前的零索引(pz)和先前的零索引(ppz)。现在在数组元素为0时遍历数组,然后计算curr和ppz之间的差。如果该差大于max,则更新最大值,最后以最大差返回prev_zero的索引。

示例

#include<iostream>
using namespace std;
int findIndex(bool arr[], int n) {
   int count_max = 0;
   int index;
   int pz = -1;
   int ppz = -1;
   for (int curr=0; curr<n; curr++) {
      if (arr[curr] == 0) {
         if (curr - ppz > count_max){
            count_max = curr - ppz;
            index = pz;
         }
         ppz = pz;
         pz = curr;
      }
   }
   if (n-ppz > count_max)
      index = pz;
   return index;
}
int main() {
   bool arr[] = {1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1};
   int n = sizeof(arr)/sizeof(arr[0]);
   cout << "Index of 0 to be replaced is "<< findIndex(arr, n);
}

输出结果

Index of 0 to be replaced is 9