
Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Find Right Interval in C++
Suppose we have a of intervals, for each of the interval i, check whether there exists an interval j whose start point is bigger than or equal to the endpoint of the interval i, which can be called that j is on the "right" of i. For any interval i, we have to store the minimum interval j's index, which indicates that the interval j has the minimum start point to build the "right" relationship for interval i. When the interval j doesn't exist, then store -1 for the interval i. And finally, we need output the stored value of each interval as an array. So if the input is like [[3,4], [2,3], [1,2]], so the output will be [-1, 0, 1], as there are no such right interval for [3, 4], For interval [2,3], the interval [3,4] has minimum-"right" start point; And for [1,2], the interval [2,3] has minimum-"right" start point.
To solve this, we will follow these steps −
n := size of intervals array, create am array ret of size n, and fill this using -1, crate a map called m
-
for i in range 0 to size of intervals
if intervals[i, 0] is in m, then skip to the next interval
m[intervals[i, 0]] := i + 1
-
for i in range n – 1 down to i >= 0
it := point to that key-value pair which has the smallest key, but not smaller than intervals[i, 1]
if the value of it is 0, then go for the next iteration
ret[i] := value of it – 1
return ret
Example (C++)
Let us see the following implementation to get a better understanding −
#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)); }
Input
[[3,4],[2,3],[1,2]]
Output
[-1,0,1]