Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

फ़्लिप करने के लिए शून्य खोजें ताकि C++ में लगातार 1 की संख्या अधिकतम हो

इस ट्यूटोरियल में, हम ज़ीरो काउंट खोजने जा रहे हैं, जिन्हें ऐरे में लगातार 1 की अधिकतम संख्या प्राप्त करने के लिए फ़्लिप करने की आवश्यकता है।

हम समस्या को हल करने के लिए स्लाइडिंग विंडो दृष्टिकोण का उपयोग करने जा रहे हैं। आइए समस्या को हल करने के लिए चरणों को देखें।

  • फ़्लिप करने के लिए सरणी और अधिकतम शून्य प्रारंभ करें।

  • लंबाई के साथ विंडो प्रारंभ, समाप्ति अनुक्रमणिका प्रारंभ करें।

  • लगातार 1 की लंबाई और प्रारंभिक अनुक्रमणिका की अधिकतम उप सरणी संग्रहीत करें।

  • अनुक्रमणिका समाप्त होने तक सरणी पर पुनरावृति करें सरणी लंबाई को पार कर जाती है।

  • यदि शून्यों की संख्या अधिकतम शून्य से कम है, तो समाप्ति सूचकांक में वृद्धि करें और यदि वर्तमान मान शून्य है तो शून्य की गणना करें।

  • यदि शून्यों की संख्या अधिकतम शून्य की संख्या से अधिक है तो प्रारंभिक सूचकांक में वृद्धि करें और यदि वर्तमान मान शून्य है तो शून्य की संख्या घटाएं।

  • अधिकतम विंडो अपडेट करें यदि वर्तमान विंडो की लंबाई पिछले एक से अधिक है।

  • सरणी पर पुनरावृति करें और विंडो आरंभिक अनुक्रमणिका का उपयोग करके शून्य अनुक्रमणिका प्रिंट करें।

उदाहरण

आइए कोड देखें।

#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;
}

आउटपुट

यदि आप उपरोक्त कोड चलाते हैं, तो आपको निम्न परिणाम प्राप्त होंगे।

The indexes are 5 7

निष्कर्ष

यदि ट्यूटोरियल में आपके कोई प्रश्न हैं, तो उनका टिप्पणी अनुभाग में उल्लेख करें।


  1. C++ . का उपयोग करके पेल नंबर खोजें

    दी गई समस्या में, हमें एक पूर्णांक n दिया गया है, हमें Pn . खोजने की आवश्यकता है , यानी, उस स्थिति में पेल नंबर। अब, जैसा कि हम जानते हैं, पेल नंबर इस सूत्र द्वारा दी गई श्रृंखला का एक हिस्सा है -Pn =2*पीएन-1 + पीएन-2 पहली दो शुरुआती संख्याओं के साथ - P0 =0 और पी1 =1 समाधान खोजने के लिए दृष्टिकोण

  1. आधार B में अनुगामी शून्यों की संख्या ज्ञात कीजिए जो N का प्रतिनिधित्व करते हैं! सी ++ का उपयोग करना

    इस लेख में, हम किसी दी गई संख्या N के अनुगामी शून्य को उसके भाज्य के आधार B निरूपण में खोजने की समस्या को समझेंगे। उदाहरण के लिए Input : N = 7 Base = 2 Output : 4 Explanation : fact(7) = 5040 in base10 and 1001110110000 in base16 having 4 trailing zero. Input : N = 11 Base = 5 Output : 2 Explanatio

  1. N के आधार 16 निरूपण में अनुगामी शून्यों की संख्या ज्ञात कीजिए! सी ++ का उपयोग करना

    इस लेख में, हम उदाहरण के लिए इसके भाज्य के आधार 16 निरूपण में दी गई संख्या N के अनुगामी शून्यों को खोजने की समस्या को समझेंगे Input : N = 7 Output : 1 Explanation : fact(7) = 5040 in base10 and 13B0 in base16 having 1 trailing zero. Input : N = 11 Output : 2 Explanation : fact(11) = 39916800 in bas