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

C++ में टोकरी में फल

मान लीजिए कि हमारे पास पेड़ों की एक पंक्ति है, i-वें पेड़ प्रकार के पेड़ के साथ फल पैदा करता है [i]। हम अपनी पसंद के किसी भी पेड़ से शुरू कर सकते हैं, फिर इन चरणों को बार-बार करें -

  • इस पेड़ के फल का एक टुकड़ा हमारी टोकरियों में डालें। अगर मौका न मिले तो रुक जाइए.
  • वर्तमान पेड़ के दायीं ओर अगले पेड़ पर जाएं। अगर दाहिनी ओर कोई पेड़ नहीं है, तो रुकें।

हमारे पास दो टोकरियाँ हैं, और प्रत्येक टोकरी कितनी भी मात्रा में फल ले जा सकती है, लेकिन हम चाहते हैं कि प्रत्येक टोकरी में केवल एक ही प्रकार का फल हो। हमें यह ज्ञात करना है कि इस विधि से हम कितने फल प्राप्त कर सकते हैं? तो अगर पेड़ [0, 1, 2, 2] की तरह हैं, तो आउटपुट 3 होगा। हम [1,2,2] इकट्ठा कर सकते हैं, अगर हम पहले पेड़ से शुरू करते हैं, तो हम केवल [0, 1]

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

  • n:=पेड़ का आकार, j:=0, उत्तर:=0
  • एक नक्शा बनाएं मी
  • मैं के लिए 0 से n - 1 की सीमा में
    • m[tree[i]] को 1 से बढ़ाएं
    • जबकि m का आकार> 2 और j <=i है, तो
      • m[tree[j]] को 1 से कम करें
      • अगर m[tree[j]] =0, तो m से पेड़ [j] को हटा दें
      • j को 1 से बढ़ाएं
    • उत्तर:=अधिकतम i – j + 1 और उत्तर
  • वापसी उत्तर

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int totalFruit(vector<int>& tree) {
      int n = tree.size();
      int j = 0;
      map <int, int> m;
      int ans = 0;
      for(int i = 0; i < n; i++){
         m[tree[i]] += 1;
         while(m.size() > 2 && j <= i){
            m[tree[j]]--;
            if(m[tree[j]] == 0)m.erase(tree[j]);
            j++;
         }
         ans = max(i - j + 1, ans);
      }
      return ans;
   }
};
main(){
   vector<int> v = {3,3,3,1,2,1,1,2,3,3,4};
   Solution ob;
   cout <<(ob.totalFruit(v));
}

इनपुट

[3,3,3,1,2,1,1,2,3,3,4]

आउटपुट

5

  1. C++ में एक सेट को k सबसेट में विभाजित करने के तरीकों की संख्या की गणना करें

    दो अंक e और p दिए गए हैं। लक्ष्य उन तरीकों की संख्या गिनना है जिनसे हम एक सेट के e तत्वों को p विभाजन/सबसेट में विभाजित कर सकते हैं। उदाहरण के लिए इनपुट e=4 p=2 आउटपुट Count of number of ways to partition a set into k subsets are: 7 स्पष्टीकरण If elements are: a b c d then ways to divide them into

  1. बोर्ड को C++ में वर्गों में काटने की न्यूनतम लागत

    अवधारणा मान लीजिए कि लंबाई p और चौड़ाई q का एक बोर्ड दिया गया है, हमें इस बोर्ड को p*q वर्गों में तोड़ने की आवश्यकता है ताकि तोड़ने की लागत कम से कम हो। इस बोर्ड के लिए हर किनारे के लिए कटिंग कॉस्ट दी जाएगी। संक्षेप में, हमें काटने के ऐसे क्रम का चयन करने की आवश्यकता है जिससे लागत कम से कम हो। उदाह

  1. C++ में बाइनरी सर्च ट्री में डालें

    मान लीजिए कि हमारे पास एक बाइनरी सर्च ट्री है। हमें केवल एक विधि लिखनी है, जो एक पैरामीटर के रूप में दिए गए नोड के साथ सम्मिलन ऑपरेशन करती है। हमें यह ध्यान रखना होगा कि ऑपरेशन के बाद पेड़ बीएसटी भी रहेगा। तो अगर पेड़ जैसा है - अगर हम 5 डालें, तो पेड़ होगा - इसे हल करने के लिए, हम इन चरणों का