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

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


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

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

इनपुट: arr[] = {0, 1, 1, 0, 0, 1}

आउटपुट: 1

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

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

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

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

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

पुनरावृत्तियों की संख्या = zeroCount / 2 यदि गिनती सम है

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

केस 2: ब्लॉक में शुरुआत या अंत में एकल 1 है और बाकी सभी मान 0 हैं।

पुनरावृत्तियों की संख्या = zeroCount

केस 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 ट्री की ऊंचाई दी गई है, कार्य ट्री में न्यूनतम नोड्स की संख्या ढूंढना है जो ट्री में हो सकते हैं। यदि ऊंचाई = 0 तो AVL ट्री में 1 नोड हो सकता है यदि ऊंचाई = 5 तो AVL ट्री में न्यूनतम 20 नोड्स हो सकते हैं एल्गोरिदम AVL ट्री में, हमें ऊंचाई संतुलन गुण बनाए रखना होता है, यानी बाएं और दा

  1. - C++ में निरपेक्ष अंतर के न्यूनतम योग वाला एरे तत्व

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

  1. - लिनियर सर्च का उपयोग करके सरणी में न्यूनतम एलिमेंट खोजने के लिए C++ प्रोग्राम

    यह लिनियर सर्च दृष्टिकोण का उपयोग करके सरणी के न्यूनतम एलिमेंट को खोजने के लिए एक C++ प्रोग्राम है। इस प्रोग्राम की समय जटिलता O(n) है। एल्गोरिदम शुरुआत डेटा एलिमेंट को सरणी में निर्दिष्ट करें। 0 इंडेक्स पर मान को न्यूनतम वेरिएबल में निर्दिष्ट करें। न्यूनतम की तुलना अन्य डेटा एलिमेंट्स से क्रमिक रूप