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

C++ . में रूसी गुड़िया लिफाफा

मान लीजिए हमारे पास कुछ लिफाफे हैं, इन लिफाफों में जोड़े के रूप में ऊंचाई और चौड़ाई मान हैं। हम एक लिफाफे को दूसरे में रख सकते हैं यदि दूसरे लिफाफे की ऊंचाई और चौड़ाई दोनों पहले वाले की ऊंचाई और चौड़ाई से छोटी हों। तो, लिफाफों की अधिकतम संख्या क्या होगी जो हम दूसरे के अंदर रख सकते हैं। इसलिए, यदि इनपुट [[5,5], [6,4], [6,8], [2,3]] जैसे हैं, तो आउटपुट 3 होगा, क्योंकि सबसे छोटा लिफाफा [2,3] है, फिर [5,5], फिर [6,8]।

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

  • ऊंचाई के आधार पर सरणी v को क्रमबद्ध करें, जब ऊंचाई समान हों, तो चौड़ाई के साथ तुलना करें
  • यदि v का आकार 0 के समान है, तो −
    • वापसी 0
  • एक सरणी रिट परिभाषित करें
  • इनिशियलाइज़ i :=0 के लिए, जब i करें
  • एक सरणी परिभाषित करें अस्थायी =v[i]
  • x:=अस्थायी[1]
  • निम्न:=0, उच्च:=रेट का आकार, वक्र:=0
  • कम <=उच्च होने पर, −
      . करें
    • मध्य :=निम्न + (उच्च-निम्न)/2
    • यदि रिट[मध्य] <अस्थायी[1], तो −
      • करी :=मध्य + 1
      • निम्न :=मध्य + 1
    • अन्यथा
      • उच्च :=मध्य - 1
  • यदि वर्तमान <0, तो −
    • निम्न भाग पर ध्यान न दें, अगले भाग पर जाएं
  • यदि curr>=रिट का आकार, तो −
      रिट के अंत में
    • अस्थायी डालें[1]
  • अन्यथा
    • ret[curr] :=temp[1]
  • रिटर्न का आकार
  • आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

    उदाहरण

    #include <bits/stdc++.h>
    using namespace std;
    class Solution {
    public:
       static bool cmp(vector <int> a, vector <int> b){
          if(a[0] == b[0])return a[1] > b[1];
          return a[0] < b[0];
       }
       int maxEnvelopes(vector<vector<int>>& v) {
          sort(v.begin(), v.end(), cmp);
          if(v.size() == 0)return 0;
          vector <int> ret;
          for(int i = 0; i < v.size(); i++){
             vector <int> temp = v[i];
             int x = temp[1];
             int low = 0;
             int high = ret.size() -1;
             int curr = 0;
             while(low <= high){
                int mid = low + (high - low) / 2;
                if(ret[mid]<temp[1]){
                   curr = mid + 1;
                   low = mid + 1;
                }else{
                   high = mid - 1;
                }
             }
             if(curr < 0) continue;
             if(curr >= (int)ret.size()){
                ret.push_back(temp[1]);;
             }else{
                ret[curr] = temp[1];
             }
          }
          return ret.size();
       }
    };
    main(){
       Solution ob;
       vector<vector<int>> v = {{5,5}, {6,4}, {6,8}, {2,3}};
       cout << (ob.maxEnvelopes(v));
    }

    इनपुट

    {{5,5}, {6,4}, {6,8}, {2,3}}

    आउटपुट

    3

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

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

    1. सी ++ में प्रक्रिया को मारें

      मान लीजिए कि हमारे पास n प्रक्रियाएं हैं, यहां प्रत्येक प्रक्रिया की एक विशिष्ट आईडी होती है जिसे PID या प्रक्रिया आईडी कहा जाता है और उसका PPID (पैरेंट प्रोसेस आईडी) भी होता है। प्रत्येक प्रक्रिया में केवल एक पैरेंट प्रक्रिया होती है, लेकिन इसमें एक या अधिक चाइल्ड प्रक्रियाएं हो सकती हैं। यह एक प

    1. सी ++ में गिलहरी सिमुलेशन

      एक पेड़, एक गिलहरी, और कई नट हैं। स्थितियों को 2डी ग्रिड में कोशिकाओं द्वारा दर्शाया जाता है। आपका लक्ष्य गिलहरी के लिए सभी नटों को इकट्ठा करने और उन्हें एक-एक करके पेड़ के नीचे रखने के लिए न्यूनतम दूरी का पता लगाना है। गिलहरी एक समय में केवल एक अखरोट ले सकती है और चार दिशाओं में - ऊपर, नीचे, बाएँ औ