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

सी++ में अंतराल निकालें


मान लीजिए कि हमारे पास अलग-अलग अंतरालों की एक क्रमबद्ध सूची है, प्रत्येक अंतराल अंतराल [i] =[a, b] संख्या x के समुच्चय को इस प्रकार दर्शाता है कि a <=x

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

  • एक विधि को परिभाषित करें जिसे मैनिपुलेट 2 () कहा जाता है, यह मैट्रिक्स a और एक सरणी y लेगा
  • x :=मैट्रिक्स a की अंतिम पंक्ति, फिर a से अंतिम पंक्ति हटाएं
  • z :=x
  • x[0] :=y[1], z[1] :=y[0]
  • अगर z[0] - z[1], तो z को a में डालें
  • अगर x[0] - x[1], तो x को a में डालें
  • मुख्य विधि मैट्रिक्स को अंदर ले जाएगी और एक सरणी t
  • एक मैट्रिक्स उत्तर परिभाषित करें, और n:=मैट्रिक्स में पंक्तियों की संख्या
  • मैं के लिए 0 से n की सीमा में -
    • उत्तर में[i] डालें
    • a :=a, b :=t की अंतिम पंक्ति
    • अगर a[0]> b[0], तो a और b को स्वैप करें
    • यदि a और b प्रतिच्छेद कर रहे हैं, तो मैनिपुलेट2(ans, t) पर कॉल करें
  • वापसी उत्तर

उदाहरण(C++)

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

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<vector<auto> > v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << "[";
      for(int j = 0; j <v[i].size(); j++){
         cout << v[i][j] << ", ";
      }
      cout << "],";
   }
   cout << "]"<<endl;
}
class Solution {
public:
   bool isIntersect(vector <int> a, vector <int> b){
      return max(a[0], a[1]) >= min(b[0], b[1]);
   }
   void manipulate2(vector < vector <int> > &a, vector <int> y){
      vector <int> x = a.back();
      a.pop_back();
      vector <int> z = x;
      x[0] = y[1];
      z[1] = y[0];
      if(z[0] < z[1])a.push_back(z);
      if(x[0] < x[1])a.push_back(x);
   }
   vector<vector<int>> removeInterval(vector<vector<int>>& in, vector<int>& t) {
      vector < vector <int> > ans;
      int n = in.size();
      for(int i = 0; i < n; i++){
         ans.push_back(in[i]);
         vector <int> a;
         vector <int> b;
         a = ans.back();
         b = t;
         if(a[0]>b[0])swap(a, b);
         if(isIntersect(a, b)){
            manipulate2(ans, t);
         }
      }
      return ans;
   }
};
main(){
   vector<int> v2 = {1,6};
   vector<vector<int>> v1 = {{0,2},{3,4},{5,7}};
   Solution ob;
   print_vector(ob.removeInterval(v1, v2));
}

इनपुट

[[0,2],[3,4],[5,7]]
[1,6]

आउटपुट

[[0, 1, ],[6, 7, ],]

  1. सी ++ में कन्स्ट्रक्टर को वेक्टर पास करना

    यह एक कंस्ट्रक्टर को वेक्टर पास करने के लिए एक सरल C++ प्रोग्राम है। एल्गोरिदम Begin    Declare a class named as vector.       Declare vec of vector type.       Declare a constructor of vector class.          Pass a vector object v as

  1. वेक्टर ::आकार () बनाम वेक्टर ::रिजर्व () सी ++ में

    जब कोई तत्व डाला या हटाया जाता है, तो वेक्टर स्वचालित रूप से गतिशील सरणी की तरह आकार बदलने की क्षमता रखता है, कंटेनर स्वचालित रूप से अपने भंडारण को संभालता है। वेक्टर आकार () और वेक्टर रिजर्व () के बीच मुख्य अंतर यह है कि आकार बदलने () का उपयोग वेक्टर के आकार को बदलने के लिए किया जाता है जहां रिजर्

  1. C++ में Inference टाइप करें

    टाइप अनुमान या कटौती एक प्रोग्रामिंग भाषा में डेटा प्रकार के एक अभिव्यक्ति की स्वचालित पहचान को संदर्भित करता है। यह कुछ दृढ़ता से टाइप की गई भाषाओं में मौजूद एक विशेषता है। सी ++ में, ऑटो कीवर्ड (सी ++ 11 में जोड़ा गया) का उपयोग स्वचालित प्रकार की कटौती के लिए किया जाता है। उदाहरण के लिए, आप एक वेक