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

बाइनरी सरणी को विभाजित करने के लिए न्यूनतम टॉगल ताकि इसमें पहले 0s और फिर C++ में 1s हो

समस्या कथन

केवल 0 और 1 वाले n पूर्णांकों की एक सरणी को देखते हुए। न्यूनतम टॉगल खोजें (0 से 1 पर स्विच करें या इसके विपरीत) आवश्यक है कि सरणी विभाजित हो जाए, यानी, इसमें पहले 0s फिर 1s हैं।

उदाहरण

अगर arr[] ={1, 0, 0, 1, 1, 1, 0} तो 2 टॉगल की आवश्यकता है यानी पहले एक और अंतिम शून्य को टॉगल करें।

एल्गोरिदम

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;
int getMinToggles(int *arr, int n) {
   int zeroCnt[n + 1] = {0};
   for (int i = 1; i <= n; ++i) {
      if (arr[i - 1] == 0) {
         zeroCnt[i] = zeroCnt[i - 1] + 1;
      } else {
         zeroCnt[i] = zeroCnt[i - 1];
      }
   }
   int result = n;
   for (int i = 1; i <= n; ++i) {
      result = min(result, i - zeroCnt[i] + zeroCnt[n] - zeroCnt[i]);
   }
   return result;
}
int main() {
   int arr[] = {1, 0, 0, 1, 1, 1, 0};
   int n = sizeof(arr) / sizeof(arr[0]);
   cout << "Minimum toggles = " << getMinToggles(arr, n) << endl;
   return 0;
}

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

आउटपुट

Minimum toggles = 2

  1. पेड़ के स्तर को खोजने के लिए कार्यक्रम जिसमें सी ++ में न्यूनतम योग है

    मान लीजिए हमारे पास एक बाइनरी ट्री है, इसकी जड़ का स्तर 1 है, इसके बच्चों का स्तर 2 है, और इसी तरह। हमें सबसे छोटा स्तर X खोजना है जैसे कि स्तर X पर नोड्स के सभी मानों का योग न्यूनतम हो। तो अगर पेड़ जैसा है - आउटपुट 2 होगा क्योंकि योग 4 - 10 =-6 है, जो न्यूनतम है। इसे हल करने के लिए, हम इन चरणों

  1. C++ में बाइनरी ट्री की न्यूनतम गहराई

    मान लीजिए हमारे पास एक बाइनरी ट्री है; हमें उस वृक्ष की न्यूनतम गहराई ज्ञात करनी है। जैसा कि हम जानते हैं कि न्यूनतम गहराई रूट नोड से निकटतम लीफ नोड तक सबसे छोटे पथ के साथ नोड्स की संख्या है। तो, अगर इनपुट पसंद है तो आउटपुट 2 . होगा इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - ट्री नोड्स

  1. किसी सरणी में न्यूनतम संख्या जोड़ें ताकि योग C++ में भी हो जाए?

    मान लीजिए कि कुछ संख्याओं के साथ एक सरणी है। हमें कम से कम यह बताना होगा कि तत्वों के योग को सम बनाने के लिए इसमें कितनी संख्याएँ जोड़ी जाएँगी। संख्या 0 से अधिक होनी चाहिए। इसलिए यदि तत्वों का योग विषम है, तो हम 1 जोड़ देंगे, लेकिन यदि योग पहले से ही सम है, तो हम इसे सम बनाने के लिए इसमें 2 जोड़ दें