Computer >> Máy Tính >  >> Lập trình >> C ++

Tìm các số 0 được lật để số 1 liên tiếp là lớn nhất trong C ++

Trong hướng dẫn này, chúng ta sẽ tìm số lượng các số 0 cần được lật lại để có được số lượng lớn nhất các số 1 liên tiếp trong mảng.

Chúng tôi sẽ sử dụng cách tiếp cận cửa sổ trượt để giải quyết vấn đề. Hãy xem các bước để giải quyết vấn đề.

  • Khởi tạo mảng và các số 0 tối đa được lật.

  • Khởi tạo cửa sổ bắt đầu, kết thúc chỉ mục cùng với độ dài.

  • Lưu trữ mảng con tối đa có độ dài và chỉ số bắt đầu của 1 liên tiếp.

  • Lặp lại trên mảng cho đến khi các chỉ mục kết thúc vượt qua độ dài của mảng.

  • Nếu số 0 nhỏ hơn số 0 tối đa thì hãy tăng chỉ số kết thúc và đếm số 0 nếu giá trị hiện tại bằng 0.

  • Nếu số 0 lớn hơn số 0 tối đa thì hãy tăng chỉ số bắt đầu và giảm số 0 nếu giá trị hiện tại bằng 0.

  • Cập nhật cửa sổ tối đa nếu độ dài cửa sổ hiện tại lớn hơn cửa sổ trước đó.

  • Lặp lại trên mảng và in các chỉ mục bằng không bằng cách sử dụng chỉ mục bắt đầu cửa sổ.

Ví dụ

Hãy xem mã.

#include <bits/stdc++.h>
using namespace std;
void zeroesIndexes(int arr[], int maxZeroes, int n) {
   int start = 0, end = 0;
   int zeroesCount = 0;
   int bestWindowCount = 0, bestWindowStartIndex = 0;
   while (end < n) {
      if (zeroesCount <= maxZeroes) {
         if (arr[end] == 0) {
            zeroesCount++;
         }
         end++;
      }
      if (zeroesCount > maxZeroes) {
         if (arr[start] == 0) {
            zeroesCount--;
         }
         start++;
      }
      if ((end - start > bestWindowCount) && (zeroesCount <= maxZeroes)) {
         bestWindowCount = end - start;
         bestWindowStartIndex = start;
      }
   }
   cout << "The indexes are ";
   for (int i = 0; i < bestWindowCount; ++i) {
      if(arr[bestWindowStartIndex + i] == 0)
         cout << bestWindowStartIndex + i << " ";
   }
}
int main() {
   int arr[] = {1, 0, 0, 1, 1, 0, 1, 0, 1, 1};
   int maxZeroes= 2;
   zeroesIndexes(arr, maxZeroes, 10);
   return 0;
}

Đầu ra

Nếu bạn chạy đoạn mã trên, thì bạn sẽ nhận được kết quả sau.

The indexes are 5 7

Kết luận

Nếu bạn có bất kỳ câu hỏi nào trong hướng dẫn, hãy đề cập đến chúng trong phần bình luận.