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

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

समस्या कथन

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

उदाहरण

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

एल्गोरिदम

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

उदाहरण

#include <bits/stdc++.h>
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++ में ट्री के सभी नोड्स को सूचना पास करने के लिए पुनरावृत्तियों की संख्या

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

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

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

  1. सी++ में एक पेड़ में सभी सेबों को इकट्ठा करने का न्यूनतम समय

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