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

C++ में बाइनरी स्ट्रिंग को अल्टरनेटिंग बनाने के लिए न्यूनतम स्वैप


समस्या कथन

सम लंबाई की एक बाइनरी स्ट्रिंग और समान संख्या में 0s और 1s दी गई है। स्ट्रिंग को अल्टरनेटिंग बनाने के लिए न्यूनतम स्वैप की संख्या क्या है? एक बाइनरी स्ट्रिंग अल्टरनेटिंग होती है यदि कोई दो क्रमागत एलिमेंट्स समान नहीं हैं

उदाहरण

यदि str = 11110000 तो 2 स्वैप आवश्यक हैं।

एल्गोरिदम

  • स्ट्रिंग में ऑड पोजीशन और इवन पोजीशन पर जीरो की संख्या गिनें। मान लें कि उनकी गिनती oddZeroCnt और evenZeroCnt है
  • स्ट्रिंग में ऑड पोजीशन और इवन पोजीशन पर वन की संख्या गिनें। मान लें कि उनकी गिनती oddOneCnt और evenOneCnt है
  • हम हमेशा 1 को 0 से स्वैप करेंगे। इसलिए हम सिर्फ जांचते हैं कि यदि हमारी अल्टरनेटिंग स्ट्रिंग 0 से शुरू होती है तो स्वैप की संख्या min (evenZeroCnt, oddOneCnt) है और यदि हमारी अल्टरनेटिंग स्ट्रिंग 1 से शुरू होती है तो स्वैप की संख्या min (evenOneCnt, oddZeroCnt) है। उत्तर इन दोनों का मिनिमम है

उदाहरण

#include 
using namespace std;

int getMinSwaps(string str) {
    int minSwaps = 0;
    int oddZeroCnt = 0;
    int evenZeroCnt = 0;
    int oddOneCnt = 1;
    int evenOneCnt = 1;
    int n = str.length();
    for (int i = 0; i < n; ++i) {
        if (i % 2 == 0) {
            if (str[i] == '1') {
                ++evenOneCnt;
            } else {
                ++evenZeroCnt;
            }
        } else {
            if (str[i] == '1') {
                ++oddOneCnt;
            } else {
                ++oddZeroCnt;
            }
        }
    }
    int zeroSwapCnt = min(evenZeroCnt, oddOneCnt);
    int oneSwapCnt = min(evenOneCnt, oddZeroCnt);
    return min(zeroSwapCnt, oneSwapCnt);
}

int main() {
    string str = "11110000";
    cout << "Minimum swaps = " << getMinSwaps(str) << endl;
    return 0;
}

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

आउटपुट

Minimum swaps = 2

  1. - C++ में N को 25 से विभाज्य बनाने के लिए दिए गए मूव्स की न्यूनतम संख्या

    समस्या कथन अग्रणी शून्य के बिना एक संख्या N दी गई है। N को 25 से विभाज्य बनाने के लिए आवश्यक न्यूनतम मूव्स की संख्या ढूंढें। प्रत्येक मूव में, कोई भी दो आसन्न अंकों को स्वैप कर सकता है और यह सुनिश्चित करना होगा कि किसी भी समय संख्या में कोई अग्रणी शून्य न हो। यदि N को 25 से विभाज्य बनाना संभव नहीं ह

  1. - C++ में स्ट्रिंग को पालिंड्रोम बनाने के लिए न्यूनतम विलोपन

    समस्या कथन आकार n की एक स्ट्रिंग दी गई है। स्ट्रिंग को पालिंड्रोम बनाने के लिए न्यूनतम वर्णों को हटाने का कार्य है। यदि दी गई स्ट्रिंग abcda है, तो हम पहले और अंतिम को छोड़कर किन्हीं 2 वर्णों को हटा सकते हैं ताकि यह पालिंड्रोम बन जाए। यदि हम b और c हटाते हैं तो ada स्ट्रिंग पालिंड्रोम है यद

  1. - C++ में को-प्राइम ऐरे बनाने के लिए न्यूनतम इंसर्शन

    इस सेक्शन में हम एक और दिलचस्प समस्या देखेंगे। मान लीजिए हमारे पास N एलिमेंट्स का एक ऐरे है। हमें इस ऐरे को को-प्राइम ऐरे बनाने के लिए न्यूनतम इंटरसेक्शन पॉइंट्स ढूंढने हैं। को-प्राइम ऐरे में हर दो लगातार एलिमेंट्स का gcd 1 होता है। हमें ऐरे भी प्रिंट करना है।मान लीजिए हमारे पास {5, 10, 20} जैसे एलि