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

सी ++ में पड़ोसियों को भरने के न्यूनतम पुनरावृत्तियों का उपयोग करके 1 के साथ सरणी भरें

इस समस्या में, हमें n तत्वों से युक्त एक सरणी गिरफ्तारी दी जाती है जो या तो 0 या 1 हैं। हमारा कार्य पड़ोसियों को भरने के न्यूनतम पुनरावृत्तियों का उपयोग करके 1 के साथ सरणी भरना है।

समस्या को समझने के लिए एक उदाहरण लेते हैं,

इनपुट: गिरफ्तारी [] ={0, 1, 1, 0, 0, 1}

आउटपुट: 1

समाधान दृष्टिकोण -

समस्या को हल करने के लिए, हमें इस तथ्य को जानना होगा कि यदि 1 किसी स्थिति में मौजूद है तो यह दो पड़ोसी 0 को 1 में बदल सकता है।

अगर, गिरफ्तारी [i] 1 है।
फिर, arr[i-1] और arr[i+1] को 1 में बदल दिया जाएगा।

इसका उपयोग करके, इनमें से किसी एक मामले का उपयोग करके समाधान पाया जा सकता है -

मामला 1: ब्लॉक में ब्लॉक के प्रारंभ और अंत में 1 होता है। शेष सभी मान 0 हैं। शून्य की संख्या गिनें।

पुनरावृत्तियों की संख्या =ज़ीरोकाउंट / 2 अगर गिनती सम है

पुनरावृत्ति की संख्या =(शून्य गणना -1)/2 यदि गणना विषम है

मामला 2: ब्लॉक में ब्लॉक के प्रारंभ या अंत में सिंगल 1 होता है और बाकी सभी मान 0 होते हैं।

पुनरावृत्तियों की संख्या =शून्य गणना

केस 3: ब्लॉक में कोई 1 नहीं है। प्रिंट -1 यह दर्शाता है कि 1 को भरना संभव नहीं है।

हमारे समाधान की कार्यप्रणाली को दर्शाने वाला कार्यक्रम,

उदाहरण

#include<iostream>
using namespace std;

int countIterationFill1(int arr[], int n) {
   
   bool oneFound = false;
   int iterationCount = 0;
   for (int i=0; i<n; ) {
      
      if (arr[i] == 1)
      oneFound = true;
      while (i<n && arr[i]==1)
         i++;
      int zeroCount = 0;
      while (i<n && arr[i]==0) {
         zeroCount++;
         i++;
      }
      if (oneFound == false && i == n)
         return -1;
      int itrCount;
      if (i < n && oneFound == true) {
         
         if (zeroCount & 1 == 0)
            itrCount = zeroCount/2;
         else
            itrCount = (zeroCount+1)/2;
         zeroCount = 0;
      }
      else{
         
         itrCount = zeroCount;
         zeroCount = 0;
      }
      iterationCount = max(iterationCount, itrCount);
   }

   return iterationCount;
}

int main() {
   
   int arr[] = {0, 1, 1, 0, 0, 1, 0, 0, 0, 1};
   int n = sizeof(arr) / sizeof(arr[0]);
   cout<<"The number of iterations to fill 1's is "<<countIterationFill1(arr, n);
   return 0;
}

आउटपुट -

The number of iterations to fill 1's is 2

  1. C++ का उपयोग करके दी गई ऊंचाई वाले AVL ट्री में नोड्स की न्यूनतम संख्या।

    समस्या कथन AVL ट्री की ऊंचाई को देखते हुए, कार्य यह पता लगाना है कि पेड़ में कितने नोड्स हो सकते हैं। If height = 0 then AVL tree can have one 1 node If height = 5 then AVL tree can have minimum 20 nodes एल्गोरिदम AVL ट्री में, हमें हाइट बैलेंस प्रॉपर्टी को बनाए रखना होता है, यानी बाएं और दाएं सबट

  1. सी ++ में पूर्ण अंतर के न्यूनतम योग के साथ ऐरे तत्व?

    यह कार्यक्रम सरणी के न्यूनतम पूर्ण अंतर को खोजने के लिए है, क्योंकि हमारे पास एक सरणी है जिसमें विशिष्ट तत्व हैं। इस अवधारणा को बेहतर ढंग से सीखने के लिए आवश्यक चीजों को फिर से ब्रश करें, सरणी समान डेटा प्रकार के तत्वों का एक कंटेनर है। सरणी की लंबाई को पूर्वनिर्धारित करने की आवश्यकता है। पूर्ण अं

  1. C++ प्रोग्राम लीनियर सर्च का उपयोग करके किसी ऐरे में न्यूनतम तत्व ढूँढ़ने के लिए

    रैखिक खोज दृष्टिकोण का उपयोग करके सरणी के न्यूनतम तत्व को खोजने के लिए यह एक सी ++ प्रोग्राम है। इस कार्यक्रम की समय जटिलता O(n) है। एल्गोरिदम Begin Assign the data element to an array. Assign the value at ‘0’ index to minimum variable. Compare minimum with other data element se