मान लीजिए कि हमारे पास अलग-अलग अंतरालों की एक क्रमबद्ध सूची है, प्रत्येक अंतराल अंतराल [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, ],]