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

C++ में सभी 1s को एक साथ ग्रुप करने के लिए न्यूनतम स्वैप


समस्या कथन

0s और 1s का एक ऐरे दिया गया है। कार्य ऐरे में मौजूद सभी 1s को एक साथ ग्रुप करने के लिए आवश्यक न्यूनतम स्वैप की संख्या ढूंढना है।

उदाहरण

यदि इनपुट ऐरे = {1, 0, 1, 1, 0, 1} तो 1 स्वैप आवश्यक है। यानी पहले 0 को अंतिम 1 से स्वैप करें।

एल्गोरिदम

  • ऐरे में कुल 1s की संख्या गिनें
  • यदि गिनती x है, तो हमें इस ऐरे की लंबाई x का वह सबएरे ढूंढना होगा जिसमें अधिकतम 1s हों
  • न्यूनतम स्वैप की आवश्यकता अधिकतम 1s वाले आकार x के सबएरे में 0s की संख्या होगी

उदाहरण

#include 
using namespace std;

int getMinSwaps(int *arr, int n) {
    int oneCnt = 0;
    for (int i = 0; i < n; ++i) {
        if (arr[i] == 1) {
            ++oneCnt;
        }
    }
    int x = oneCnt;
    int maxOnes = INT_MIN;
    int preCompute[n] = {0};
    if (arr[0] == 1) {
        preCompute[0] = 1;
    }
    for (int i = 1; i < n; ++i) {
        if (arr[i] == 1) {
            preCompute[i] = preCompute[i - 1] + 1;
        } else {
            preCompute[i] = preCompute[i - 1];
        }
    }
    for (int i = x - 1; i < n; ++i) {
        if (i == (x - 1)) {
            oneCnt = preCompute[i];
        } else {
            oneCnt = preCompute[i] - preCompute[i - x];
        }
        if (maxOnes < oneCnt) {
            maxOnes = oneCnt;
        }
    }
    int swapCnt = x - oneCnt;
    return swapCnt;
}

int main() {
    int arr[] = {1, 0, 1, 1, 0, 1};
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << "Minimum swap count = " << getMinSwaps(arr, n) << endl;
    return 0;
}

जब आप उपरोक्त प्रोग्राम को कंपाइल और 실행 करते हैं। यह निम्नलिखित आउटपुट उत्पन्न करता है -

आउटपुट

Minimum swap count = 1

  1. C++ में ट्री में सभी नोड्स तक जानकारी पास करने के लिए न्यूनतम पुनरावृत्तियों की संख्या C++ में ट्री में सभी नोड्स तक जानकारी पास करने के लिए न्यूनतम पुनरावृत्तियों की संख्या

    हमें n संख्या में नोड्स के साथ एक ट्री डेटा संरचना दी गई है। दिया गया ट्री एक रूट नोड और संबंधित चाइल्ड्स होगा जो किसी भी संख्या में हो सकते हैं और आगे चाइल्ड के किसी भी संख्या में चाइल्ड हो सकते हैं। कार्य ट्री के रूट नोड द्वारा ट्री में सभी नोड्स तक जानकारी पास करने के लिए आवश्यक न्यूनतम पुनरावृत्

  1. - C++ में सभी बैनर लटकाने के लिए आवश्यक न्यूनतम पिन की संख्या ढूंढने का प्रोग्राम

    समस्या विवरण मान लीजिए हमारे पास [शुरुआत, अंत] फॉर्म के अंतरालों की एक सूची है जो हमारे द्वारा लटकाए जाने वाले बैनरों के प्रारंभ और अंत बिंदुओं को दर्शाती है। एक बैनर लटकाने के लिए कम से कम एक पिन की आवश्यकता होती है, और एक पिन एक से अधिक बैनर लटका सकता है। हमें सभी बैनर लटकाने के लिए आवश्यक पिन की

  1. C++ में ट्री में सभी सेब इकट्ठा करने का न्यूनतम समय C++ में ट्री में सभी सेब इकट्ठा करने का न्यूनतम समय

    मान लीजिए हमारे पास n वर्टेक्स वाला एक अनडायरेक्टेड ट्री है जो 0 से n-1 तक नंबर किए गए हैं, जिनके वर्टेक्स में कुछ सेब हैं। हम ट्री के एक एज पर चलने में 1 सेकंड खर्च करते हैं। हमें वर्टेक्स 0 से शुरू करके ट्री में सभी सेब इकट्ठा करने और इस वर्टेक्स पर वापस आने में खर्च होने वाले न्यूनतम समय (सेकंड म