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

C++ . में बल्ब स्विचर III


मान लीजिए कि हमारे पास n बल्ब वाला एक कमरा है, इन्हें 1 से n तक क्रमांकित किया गया है, बाएं से दाएं एक पंक्ति में व्यवस्थित किया गया है। प्रारंभ में, सभी बल्ब बंद कर दिए जाते हैं। पल में k (k के लिए 0 से n -1 की सीमा में), हम प्रकाश [k] बल्ब को चालू करते हैं। एक बल्ब का रंग नीले रंग में तभी बदलता है जब वह चालू हो और पिछले सभी बल्ब (बाईं ओर) भी चालू हों। हमें उन आघूर्णों की संख्या ज्ञात करनी है जिनमें सभी बल्बों को चालू किया गया नीला है। तो यह एक उदाहरण है -

C++ . में बल्ब स्विचर III

आउटपुट 3 होगा क्योंकि क्षण 1, 2 और 4 हैं।

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

  • ret :=0, एक सेट x परिभाषित करें, n :=सूची सरणी का आकार, एक नक्शा परिभाषित करें m

  • अधिकतम ढेर-आधारित प्राथमिकता कतार pq परिभाषित करें

  • I के लिए 0 से n - 1 की सीमा में

    • m[light[i]] :=i और i को pq में सम्मिलित करें

  • I के लिए 1 से n की सीमा में

    • x में m[i] डालें

    • जबकि pq खाली नहीं है और pq का शीर्ष अवयव सेट x में है,

      • pq से हटाएं

    • ret :=ret + 1 जब (pq खाली हो या pq>=i के ऊपर हो), अन्यथा 0

  • रिटर्न रेस

उदाहरण (C++)

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int numTimesAllBlue(vector<int>& light) {
      int ret = 0;
      set <int> x;
      int n = light.size();
      map <int, int> m;
      priority_queue <int, vector <int>, greater <int> > pq;
      for(int i = 0; i < n; i++){
         m[light[i]] = i;
         pq.push(i);
      }
      for(int i = 1; i <=n; i++){
         x.insert(m[i]);
         while(!pq.empty() && x.count(pq.top()))pq.pop();
         ret += (pq.empty() || (pq.top() >= i));
      }
      return ret;
   }
};
main(){
   vector<int> v = {2,1,3,5,4};
   Solution ob;
   cout << (ob.numTimesAllBlue(v));
}

इनपुट

[2,1,3,5,4]

आउटपुट

3

  1. C++ . में विकर्ण ट्रैवर्स II

    मान लीजिए कि हमारे पास nums नामक सूचियों की एक सूची है, हमें अंकों के सभी तत्वों को विकर्ण क्रम में दिखाना होगा। तो, अगर इनपुट पसंद है तो आउटपुट [1,6,2,8,7,3,9,4,12,10,5,13,11,14,15,16] होगा इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - एक सरणी रिट परिभाषित करें एक 2डी सरणी को परिभाषित

  1. C++ . में भूलभुलैया III

    मान लीजिए कि खाली जगह और दीवारों के साथ एक भूलभुलैया है और उस भूलभुलैया में एक गेंद भी है। गेंद ऊपर (यू), नीचे (डी), बाएं (एल) या दाएं (आर) दिशाओं को लुढ़क कर खाली जगहों से जा सकती है, लेकिन यह दीवार से टकराने तक लुढ़कती रहती है। जब गेंद रुकती है, तो वह अगली दिशा चुन सकती है। उस भूलभुलैया में एक छेद

  1. सी++ में सर्पिल मैट्रिक्स III

    मान लीजिए कि हमारे पास आर पंक्तियों और सी कॉलम के साथ एक 2 आयामी ग्रिड है, हम पूर्व की ओर (r0, c0) से शुरू करते हैं। यहां, ग्रिड का उत्तर-पश्चिम कोना पहली पंक्ति और स्तंभ पर है, और ग्रिड का दक्षिण-पूर्व कोना अंतिम पंक्ति और स्तंभ पर है। हम इस ग्रिड में हर स्थिति का दौरा करने के लिए एक दक्षिणावर्त सर