मान लीजिए कि हमारे पास प्रत्येक अंतराल i के लिए अंतराल है, जांचें कि क्या कोई अंतराल j मौजूद है जिसका प्रारंभ बिंदु अंतराल i के समापन बिंदु से बड़ा या उसके बराबर है, जो कर सकता है कहा जा सकता है कि j, i के "दाईं ओर" है। किसी भी अंतराल i के लिए, हमें न्यूनतम अंतराल j के सूचकांक को संग्रहीत करना होगा, जो इंगित करता है कि अंतराल j में अंतराल i के लिए "सही" संबंध बनाने के लिए न्यूनतम प्रारंभ बिंदु है। जब अंतराल j मौजूद नहीं है, तो अंतराल i के लिए -1 स्टोर करें। और अंत में, हमें एक सरणी के रूप में प्रत्येक अंतराल के संग्रहीत मूल्य को आउटपुट करने की आवश्यकता होती है। तो अगर इनपुट [[3,4], [2,3], [1,2]] जैसा है, तो आउटपुट [-1, 0, 1] होगा, क्योंकि [3 के लिए ऐसा कोई सही अंतराल नहीं है। , 4], अंतराल [2,3] के लिए, अंतराल [3,4] में न्यूनतम- "दाएं" प्रारंभ बिंदु है; और [1,2] के लिए, अंतराल [2,3] में न्यूनतम-"दाएं" प्रारंभ बिंदु होता है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
n :=अंतराल सरणी का आकार, आकार n का am सरणी ret बनाएं, और इसे -1 का उपयोग करके भरें, m नामक मानचित्र बनाएं
-
मेरे लिए 0 से लेकर अंतराल के आकार तक
-
अगर अंतराल [i, 0] मी में है, तो अगले अंतराल पर जाएं
-
मी [अंतराल [i, 0]] :=i + 1
-
-
मैं के लिए n – 1 से नीचे की श्रेणी में>=0
-
it :=उस की-वैल्यू पेयर को इंगित करें जिसमें सबसे छोटी कुंजी है, लेकिन अंतराल से छोटी नहीं है [i, 1]
-
यदि इसका मान 0 है, तो अगले पुनरावृत्ति के लिए जाएं
-
ret[i] :=इसका मान – 1
-
-
वापसी रिट
उदाहरण (C++)
आइए एक बेहतर समझ प्राप्त करने के लिए निम्नलिखित कार्यान्वयन देखें -
#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;
}
class Solution {
public:
vector<int> findRightInterval(vector<vector<int>>& intervals) {
int n = intervals.size();
vector <int> ret(n, -1);
map <int, int< m;
for(int i = 0; i < intervals.size(); i++){
if(m.count(intervals[i][0])) continue;
m[intervals[i][0]] = i + 1;
}
for(int i = n - 1; i >= 0; i--){
map <int, int> :: iterator it = m.lower_bound(intervals[i][1]);
if(it->second == 0) continue;
ret[i] = it->second - 1;
}
return ret;
}
};
main(){
vector<vector<int>> v = {{3,4},{2,3},{1,2}};
Solution ob;
print_vector(ob.findRightInterval(v));
} इनपुट
[[3,4],[2,3],[1,2]]
आउटपुट
[-1,0,1]