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


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

我们必须跟踪三个索引:当前索引 (curr)、前一个零索引 (pz) 和前前一个零索引 (ppz)。现在遍历数组,当数组元素为 0 时,计算 curr 和 ppz 之间的差值。如果差值大于最大值,则更新最大值,最后返回具有最大差值的 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

更新于: 2019 年 12 月 18 日

178 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始
广告