C++ 中的最大連續 1 的個數 II


假設我們有一個二進位制陣列;我們必須找到這個陣列中連續 1 的最大個數,如果我們至多可以翻轉 0 個。

因此,如果輸入像 [1,0,1,1,0],則輸出將是 4,因為如果我們翻轉第一個 0,將得到連續 1 的最大個數。翻轉後,連續 1 的最大個數是 4。

要解決這個問題,我們將按以下步驟進行 −

  • ret := 1,n := 數字的大小

  • 如果 n 不為零,則 −

    • 返回 0

  • j := 0,zero := 0

  • 對於初始化 i := 0,當 i < n,更新 (將 i 加 1),執行 −

    • 如果數字 [i] 等於 0,則 −

      • (增大零的計數 1)

    • 當 (j <= i 且 zero > 1) 時,執行 −

      • 如果數字 [j] 等於 0,則 −

        • (減小 zero 的計數 1)

      • (將 j 加 1)

    • ret := ret 和 (i - j + 1) 的最大值

  • 返回 ret

範例 

我們看看以下實現來獲得更好的理解 −

 現場演示

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int findMaxConsecutiveOnes(vector<int<& nums) {
      int ret = 1;
      int n = nums.size();
      if (!n)
         return 0;
      int j = 0;
      int zero = 0;
      for (int i = 0; i < n; i++) {
         if (nums[i] == 0) {
            zero++;
         }
         while (j <= i && zero > 1) {
            if (nums[j] == 0) {
               zero--;
            }
            j++;
         }
         ret = max(ret, i - j + 1);
      }
      return ret;
   }
};
main(){
   Solution ob;
   vector<int< v = {1,0,1,1,1,0,1,1};
   cout << (ob.findMaxConsecutiveOnes(v));
}

輸入

{1,0,1,1,1,0,1,1}

輸出

6

更新日期:19-11-2020

1K+ 次瀏覽

開啟您的 職業生涯

完成課程以取得認證

開始
廣告