LeetCode刷题实战436:寻找右区间
You are given an array of intervals, where intervals[i] = [starti, endi] and each starti is unique.
The right interval for an interval i is an interval j such that startj >= endi and startj is minimized.
Return an array of right interval indices for each interval i. If no right interval exists for interval i, then put -1 at index i.
示例
示例 1:
输入:intervals = [[1,2]]
输出:[-1]
解释:集合中只有一个区间,所以输出-1。
示例 2:
输入:intervals = [[3,4],[2,3],[1,2]]
输出:[-1, 0, 1]
解释:对于 [3,4] ,没有满足条件的“右侧”区间。
对于 [2,3] ,区间[3,4]具有最小的“右”起点;
对于 [1,2] ,区间[2,3]具有最小的“右”起点。
示例 3:
输入:intervals = [[1,4],[2,3],[3,4]]
输出:[-1, 2, -1]
解释:对于区间 [1,4] 和 [3,4] ,没有满足条件的“右侧”区间。
对于 [2,3] ,区间 [3,4] 有最小的“右”起点。
解题
class Solution {
public:
vector<int> findRightInterval(vector<vector<int>>& intervals) {
map<int,int> m;//左端点,对应下标idx
for(int i = 0; i < intervals.size(); ++i)
m[intervals[i][0]] = i;
vector<int> ans(intervals.size());
for(int i = 0; i < intervals.size(); ++i)
{
auto it = m.lower_bound(intervals[i][1]);
if(it == m.end())
ans[i] = -1;
else
ans[i] = it->second;
}
return ans;
}
};
LeetCode刷题实战426:将二叉搜索树转化为排序的双向链表
评论
