Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

Max Consecutive Ones II ใน C ++


สมมติว่าเรามีอาร์เรย์ไบนารี เราต้องหาจำนวนสูงสุดของ 1s ที่ต่อเนื่องกันในอาร์เรย์นี้ถ้าเราสามารถพลิกได้ไม่เกิน 0

ดังนั้น หากอินพุตเป็น [1,0,1,1,0] เอาต์พุตจะเป็น 4 เพราะหากเราพลิกศูนย์แรกจะได้จำนวนสูงสุดที่ 1 วินาทีติดต่อกัน หลังจากพลิกแล้ว จำนวนสูงสุดของ 1 วินาทีติดต่อกันคือ 4

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • ret :=1, n :=ขนาดของ nums

  • ถ้าไม่ใช่ n จะไม่ใช่ศูนย์ ดังนั้น −

    • คืนค่า 0

  • j :=0, ศูนย์ :=0

  • สำหรับการเริ่มต้น i :=0 เมื่อ i

    • ถ้า nums[i] เท่ากับ 0 แล้ว −

      • (เพิ่มศูนย์ขึ้น 1)

    • ในขณะที่ (j <=i และศูนย์> 1) ทำ -

      • ถ้า nums[j] เท่ากับ 0 แล้ว −

        • (ลดศูนย์ลง 1)

      • (เพิ่มขึ้น j โดย 1)

    • ret :=สูงสุดของ ret และ (i - j + 1)

  • รีเทิร์น

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

#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