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

सी++ में अंतराल डालें


मान लीजिए कि हमारे पास गैर-अतिव्यापी अंतरालों का एक सेट है; हमें अंतराल में एक नया अंतराल डालना होगा। यदि आवश्यक हो तो हम विलय कर सकते हैं। इसलिए यदि इनपुट - [[1,4], [6,9]] जैसा है, और नया अंतराल [2,5] है, तो आउटपुट [[1,5], [6,9]] होगा।

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

  • पिछली अंतराल सूची के अंत में नया अंतराल डालें

  • अंतराल के प्रारंभिक समय के आधार पर अंतराल सूची को क्रमबद्ध करें, n:=अंतरालों की संख्या

  • ans नामक एक सरणी बनाएं, पहले अंतराल को ans में डालें

  • सूचकांक :=1

  • जबकि अनुक्रमणिका

    • अंतिम:=उत्तर का आकार – 1

    • यदि अधिकतम उत्तर [अंतिम, 0] और उत्तर [अंतिम, 1] <अंतराल का मिनट [सूचकांक, 0], अंतराल [अनुक्रमणिका, 1], तो उत्तर में अंतराल [अनुक्रमणिका] डालें

    • अन्यथा

      • उत्तर सेट करें [अंतिम, 0]:=उत्तर का मिनट [अंतिम, 0], अंतराल [सूचकांक, 0]

      • उत्तर सेट करें [अंतिम, 1]:=उत्तर का मिनट [अंतिम, 1], अंतराल [सूचकांक, 1]

    • इंडेक्स को 1 से बढ़ाएं

  • वापसी उत्तर

उदाहरण

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

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<auto> v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << v[i] << ", ";
   }
   cout << "]"<<endl;
}
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:
   static bool cmp(vector <int> a, vector <int> b){
      return a[0]<b[0];
   }
   vector<vector <int>>insert(vector<vector <int> >& intervals, vector <int>& newInterval) {
      intervals.push_back(newInterval);
      sort(intervals.begin(),intervals.end(),cmp);
      int n = intervals.size();
      vector <vector <int>> ans;
      ans.push_back(intervals[0]);
      int index = 1;
      bool done = false;
      while(index<n){
         int last = ans.size()-1;
         if(max(ans[last][0],ans[last][1])<min(intervals[index][0],intervals[i ndex][1])){
            ans.push_back(intervals[index]);
         } else {
            ans[last][0] = min(ans[last][0],intervals[index][0]);
            ans[last][1] = max(ans[last][1],intervals[index][1]);
         }
         index++;
      }
      return ans;
   }
};
main(){
   vector<vector<int>> v = {{1,4},{6,9}};
   vector<int> v1 = {2,5};
   Solution ob;
   print_vector(ob.insert(v, v1));
}

इनपुट

[[1,4],[6,9]]
[2,5]

आउटपुट

[[1, 5, ],[6, 9, ],]

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

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

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

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

  1. सी ++ एसटीएल में डालें बनाम डालें

    एम्प्लेस ऑपरेशन ऑब्जेक्ट की अनावश्यक कॉपी से बचता है और इंसर्ट ऑपरेशन की तुलना में इंसर्शन को अधिक कुशलता से करता है। इन्सर्ट ऑपरेशन किसी ऑब्जेक्ट का संदर्भ लेता है। एल्गोरिदम Begin Declare set. Use emplace() to insert pair. Use insert() to insert pair by using emplace(). Print the set.