मान लीजिए कि हमारे पास प्रत्येक अंतराल 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]