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

सी++ में बगीचे में पानी भरने के लिए नलों की न्यूनतम संख्या


मान लीजिए कि x-अक्ष पर एक आयामी बगीचा है। बगीचे की प्रारंभिक स्थिति 0 है, और समाप्ति स्थिति n है। बगीचे में बिंदु [0, 1, ..., n] पर स्थित n + 1 नल हैं। यदि हमारे पास एक पूर्णांक n है और एक पूर्णांक सरणी लंबाई n + 1 है, जहां रेंज [i] i-th टैप क्षेत्र को पानी दे सकता है [i - रेंज [i], i + रेंज [i]] जब वह क्षेत्र है खुला।

हमें कम से कम नलों की संख्या ज्ञात करनी है जो पूरे बगीचे में पानी भरने के लिए खुले हों, यदि कोई समाधान संभव नहीं है, तो -1 को वापस कर दें।

इसलिए, यदि इनपुट n =5, और रेंज =[3,4,1,1,1,0] जैसा है, तो आउटपुट 1 होगा, जैसा कि दूसरे टैप से, यह पूरे मैदान को कवर करेगा [-3 से 5]।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • एक सरणी v आकार (n + 1) को परिभाषित करें और इसे -1 से भरें

  • इनिशियलाइज़ i :=0 के लिए, जब i <=n, अपडेट करें (i को 1 से बढ़ाएँ), करें -

    • u :=अधिकतम i - श्रेणियां[i] और 0

    • e :=न्यूनतम n और i + श्रेणियां[i]

    • v[u] :=अधिकतम v[u] और e

  • अगर v[0] -1 के समान है, तो -

    • वापसी -1

  • वर्तमान:=वी[0]

  • मैं :=0, अगला :=0

  • जबकि curr

    • जबकि मैं <=curr, करते हैं -

      • अगला:=अगले का अधिकतम और v[i]

      • (i 1 से बढ़ाएँ)

    • अगर अगला कर्व के समान है, तो -

      • वापसी -1

    • वर्तमान:=अगला

    • (रिटर्न 1 से बढ़ाएं)

  • वापसी रिट

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

उदाहरण

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int minTaps(int n, vector<int>& ranges) {
      int ret = 1;
      vector<int> v(n + 1, -1);
      for (int i = 0; i <= n; i++) {
         int u = max(i - ranges[i], 0);
         int e = min(n, i + ranges[i]);
         v[u] = max(v[u], e);
      }
      if (v[0] == -1)
      return -1;
      int curr = v[0];
      int i = 0;
      int next = 0;
      while (curr < n) {
         while (i <= curr) {
            next = max(next, v[i]);
            i++;
         }
         if (next == curr)
         return -1;
         curr = next;
         ret++;
      }
      return ret;
   }
};
main(){
   Solution ob;
   vector<int> v = {3,4,1,1,1,0};
   cout << (ob.minTaps(5, v));
}

इनपुट

5, {3,4,1,1,1,0}

आउटपुट

1

  1. C++ में मितव्ययी संख्या

    इस समस्या में, हमें एक धनात्मक पूर्णांक N दिया जाता है। हमारा कार्य यह जाँचने के लिए एक प्रोग्राम बनाना है कि दी गई संख्या मितव्ययी संख्या है या नहीं। मितव्ययी संख्या - एक संख्या जिसके अंकों की संख्या दी गई संख्या के अभाज्य गुणनखंड में अंकों की संख्या से अधिक है। उदाहरण − 625, संख्या 625 का अभाज्

  1. सी ++ में न्यूनतम संभावित छद्म-बाइनरी संख्याओं के योग के रूप में एक संख्या का प्रतिनिधित्व करें

    यह ट्यूटोरियल न्यूनतम छद्म-बाइनरी संख्याओं के योग के रूप में एक संख्या के प्रतिनिधित्व पर चर्चा करेगा। छद्म-द्विआधारी संख्याएँ वे संख्याएँ होती हैं जिनमें केवल द्विआधारी अंक होते हैं, अर्थात, 0 और 1. छद्म-द्विआधारी संख्याओं के उदाहरण हैं 00, 11, 10, 100, 111, 1011, आदि। नीचे संख्याओं के कुछ उदाहरण

  1. सी++ पेंटाटोप नंबर

    पास्कल के त्रिभुज में एक पंचकोण संख्या को पाँचवीं संख्या के रूप में वर्णित किया गया है। अब, जैसा कि आप जानते हैं, यह पांचवीं संख्या है, तो इसका मतलब है कि हमारे पास पास्कल के त्रिकोण में कम से कम पांच संख्याएं होनी चाहिए, इसलिए इस श्रृंखला की पहली संख्या 1 4 6 4 1 से शुरू होती है। पास्कल त्रिभुज की