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

C++ में सभी 1s को बाएँ और 0s दाईं ओर बनाने के लिए न्यूनतम फ़्लिप

समस्या कथन

एक बाइनरी स्ट्रिंग को देखते हुए जिसमें हम सभी 1 को बाएं भाग में और सभी 0 को दाएं भाग में फ़्लिप कर सकते हैं। कार्य सभी 1 को बाईं ओर और सभी 0 को दाईं ओर बनाने के लिए आवश्यक न्यूनतम फ़्लिप की गणना करना है

उदाहरण

दिया गया बाइनरी स्ट्रिंग 0010101 है। इस स्ट्रिंग में 3 1-बिट्स और 4 0-बिट्स हैं। हमें सभी 1 को बाईं ओर और सभी 0 को दाईं ओर बनाने के लिए हाइलाइट किए गए 4 बिट्स को फ़्लिप करना होगा जैसा कि नीचे दिखाया गया है -

0010101

फ़्लिप करने के बाद स्ट्रिंग बन जाएगी -

1110000

एल्गोरिदम

  • स्ट्रिंग को बाएं से दाएं पार करें और सभी 0 को 1 में बदलने के लिए आवश्यक फ़्लिप की संख्या की गणना करें।
  • दाईं से बाईं ओर स्ट्रिंग को पार करें और सभी 1 से 0 को गुप्त करने के लिए आवश्यक फ़्लिप की संख्या की गणना करें
  • बिट्स के बीच की सभी स्थितियों को पार करें और (0 के फ़्लिप + 1′s फ़्लिप) का न्यूनतम मान ज्ञात करें

उदाहरण

#include <iostream>
#include <string>
#include <climits>
using namespace std;
int minFlips(string binaryString) {
   int n = binaryString.length();
   int flipCnt, zeroFlips[n], oneFlips[n];
   flipCnt = 0;
   for (int i = 0; i < n; ++i) {
      if (binaryString[i] == '0') {
         ++flipCnt;
      }
      zeroFlips[i] = flipCnt;
   }
   flipCnt = 0;
   for (int i = n - 1; i >= 0; --i) {
      if (binaryString[i] == '1') {
         ++flipCnt;
      }
      oneFlips[i] = flipCnt;
   }
   int minFlips = INT_MAX;
   for (int i = 1; i < n; ++i) {
      int sum = zeroFlips[i - 1] + oneFlips[i]; if (sum < minFlips) {
         minFlips = sum;
      }
   }
   return minFlips;
}
int main() {
   string binaryString = "0010101";
   cout << "Minimum flips: " << minFlips(binaryString) <<
   endl;
   return 0;
}

आउटपुट

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

Minimum flips: 4

  1. बाइनरी ट्री के सभी लीफ नोड्स को C++ में दाएं से बाएं प्रिंट करें

    इस समस्या में, हमें एक बाइनरी ट्री दिया जाता है और हमें बाइनरी ट्री के सभी लीफ नोड्स को दाएं से बाएं प्रिंट करना होता है। आइए समस्या को समझने के लिए एक उदाहरण लेते हैं इनपुट - आउटपुट - 7 4 1 इस समस्या को हल करने के लिए, हमें बाइनरी ट्री को पार करना होगा। यह ट्रैवर्सल दो तरह से किया जा सकता है

  1. सी ++ ऑपरेटर वरीयता और सहयोगीता के साथ

    संचालिका पूर्वता एक व्यंजक में पदों के समूहन को निर्धारित करती है। एक ऑपरेटर की संबद्धता एक संपत्ति है जो यह निर्धारित करती है कि एक ही वरीयता के ऑपरेटरों को कोष्ठक की अनुपस्थिति में कैसे समूहीकृत किया जाता है। यह प्रभावित करता है कि अभिव्यक्ति का मूल्यांकन कैसे किया जाता है। कुछ ऑपरेटरों की प्राथमि

  1. C++ . में ऑपरेटरों की प्राथमिकता

    संचालिका पूर्वता एक व्यंजक में पदों के समूहन को निर्धारित करती है। एक ऑपरेटर की संबद्धता एक संपत्ति है जो यह निर्धारित करती है कि एक ही वरीयता के ऑपरेटरों को कोष्ठक की अनुपस्थिति में कैसे समूहीकृत किया जाता है। यह प्रभावित करता है कि अभिव्यक्ति का मूल्यांकन कैसे किया जाता है। कुछ ऑपरेटरों की प्राथमि