给定一组区间,对于每一个区间 i,检查是否存在一个区间 j,它的起始点大于或等于区间 i 的终点,这可以称为 j 在 i 的“右侧”。
对于任何区间,你需要存储的满足条件的区间 j 的最小索引,这意味着区间 j 有最小的起始点可以使其成为“右侧”区间。如果区间 j 不存在,则将区间 i 存储为 -1。最后,你需要输出一个值为存储的区间值的数组。
注意:
    你可以假设区间的终点总是大于它的起始点。
    你可以假定这些区间都不具有相同的起始点。
示例 1:
输入: [ [1,2] ]
输出: [-1]
解释:集合中只有一个区间,所以输出-1。

示例 2:
输入: [ [3,4], [2,3], [1,2] ]
输出: [-1, 0, 1]
解释:对于[3,4],没有满足条件的“右侧”区间。
对于[2,3],区间[3,4]具有最小的“右”起点;
对于[1,2],区间[2,3]具有最小的“右”起点。

示例 3:
输入: [ [1,4], [2,3], [3,4] ]
输出: [-1, 2, -1]
解释:对于区间[1,4]和[3,4],没有满足条件的“右侧”区间。
对于[2,3],区间[3,4]有最小的“右”起点。

详见:https://leetcode.com/problems/find-right-interval/description/

C++:

方法一:

/**
* Definition for an interval.
* struct Interval {
* int start;
* int end;
* Interval() : start(0), end(0) {}
* Interval(int s, int e) : start(s), end(e) {}
* };
*/
class Solution {
public:
vector<int> findRightInterval(vector<Interval>& intervals) {
vector<int> res, v;
unordered_map<int, int> m;
for (int i = 0; i < intervals.size(); ++i)
{
m[intervals[i].start] = i;
v.push_back(intervals[i].start);
}
sort(v.begin(), v.end(), greater<int>());
for (auto a : intervals)
{
int i = 0;
for (; i < v.size(); ++i)
{
if (v[i] < a.end)
{
break;
}
}
res.push_back((i > 0) ? m[v[i - 1]] : -1);
}
return res;
}
};

方法二:

/**
* Definition for an interval.
* struct Interval {
* int start;
* int end;
* Interval() : start(0), end(0) {}
* Interval(int s, int e) : start(s), end(e) {}
* };
*/
class Solution {
public:
vector<int> findRightInterval(vector<Interval>& intervals) {
vector<int> res;
map<int, int> m;
for (int i = 0; i < intervals.size(); ++i)
{
m[intervals[i].start] = i;
}
for (auto a : intervals)
{
auto it = m.lower_bound(a.end);
if (it == m.end())
{
res.push_back(-1);
}
else
{
res.push_back(it->second);
}
}
return res;
}
};

参考:https://www.cnblogs.com/grandyang/p/6018581.html

最新文章

  1. webApi上传下载文件
  2. 领导让我重新做一个微信H5页面!
  3. ubuntu 14 配置 tomcat
  4. Android:布局单位换算
  5. UILabel的各种属性与方法的使用
  6. 使用Code first 进行更新数据库结构(数据迁移)
  7. java ssh框架入门
  8. 关于APlayer播放器在打包安装后提示“没有注册类”的解决办法
  9. [Audio processing] 常见语音特征 —— LPC
  10. Web 前端利器Emmet 的HTML用法总结
  11. MySQL两种引擎的区别
  12. 1.如何使用vbs打开网页并且登陆
  13. 《程序员修炼之道:从小工到专家》【PDF】下载
  14. JSP1.x 自定义标签
  15. Oracle 18c 数据库中scott用户不存在的解决方法
  16. postgresql 创建gin索引
  17. 前端测试框架Jest系列教程 -- Expect(验证)
  18. PHP(一般标签介绍,标签特性,实体名称,绝对路径与相对路径)
  19. vue 所有的指令
  20. Spring Boot log4j多环境日志级别的控制

热门文章

  1. vue + vue-lazyload 实现图片懒加载
  2. vue-cli中process.env配置以及打包本地运行或者线上运行配置
  3. iOS中3种正则表达式的使用
  4. LoadRunner系列之—-01 接口压力测试脚本
  5. 10 逻辑完善以及bug修复
  6. 【bzoj2152】【聪聪可可】【点分治】
  7. Codeforces Round #310 (Div. 1) C. Case of Chocolate (线段树)
  8. 在myeclipse下面创建多层包
  9. Form content types
  10. C++明确规定,不能获取构造函数和析构函数的地址