Given a set of intervals, for each of the interval i, check if there exists an interval j whose start point is bigger than or equal to the end point of the interval i, which can be called that j is on the "right" of i.

For any interval i, you need to store the minimum interval j's index, which means that the interval j has the minimum start point to build the "right" relationship for interval i. If the interval j doesn't exist, store -1 for the interval i. Finally, you need output the stored value of each interval as an array.

Note:

  1. You may assume the interval's end point is always bigger than its start point.
  2. You may assume none of these intervals have the same start point.

Example 1:

Input: [ [1,2] ]

Output: [-1]

Explanation: There is only one interval in the collection, so it outputs -1.

Example 2:

Input: [ [3,4], [2,3], [1,2] ]

Output: [-1, 0, 1]

Explanation: There is no satisfied "right" interval for [3,4].
For [2,3], the interval [3,4] has minimum-"right" start point;
For [1,2], the interval [2,3] has minimum-"right" start point.

Example 3:

Input: [ [1,4], [2,3], [3,4] ]

Output: [-1, 2, -1]

Explanation: There is no satisfied "right" interval for [1,4] and [3,4].
For [2,3], the interval [3,4] has minimum-"right" start point.

Approach #1:

/**
* 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) {
int len = intervals.size();
vector<int> ans;
map<int, int> temp;
for (int i = 0; i < len; ++i) {
temp[intervals[i].start] = i;
}
for (int i = 0; i < len; ++i) {
auto it = temp.lower_bound(intervals[i].end);
if (it != temp.end()) ans.push_back(it->second);
else ans.push_back(-1);
}
return ans;
}
};
Runtime: 64 ms, faster than 69.43% of C++ online submissions for Find Right Interval.

 Analysis:

std::map::lower_bound

      iterator lower_bound (const key_type& k);
const_iterator lower_bound (const key_type& k) const;
Return iterator to lower bound

Returns an iterator pointing to the first element in the container whose key is not considered to go before k (i.e., either it is equivalent or goes after).

The function uses its internal comparison object (key_comp) to determine this, returning an iterator to the first element for which key_comp(element_key,k) would return false.

If the map class is instantiated with the default comparison type (less), the function returns an iterator to the first element whose key is not less than k.

A similar member function, upper_bound, has the same behavior as lower_bound, except in the case that the mapcontains an element with a key equivalent to k: In this case, lower_bound returns an iterator pointing to that element, whereas upper_bound returns an iterator pointing to the next element.

Parameters

k
Key to search for.
Member type key_type is the type of the elements in the container, defined in map as an alias of its first template parameter (Key).

Return value

An iterator to the the first element in the container whose key is not considered to go before k, or map::end if all keys are considered to go before k.

If the map object is const-qualified, the function returns a const_iterator. Otherwise, it returns an iterator.

Member types iterator and const_iterator are bidirectional iterator types pointing to elements (of type value_type).
Notice that value_type in map containers is itself also a pair type: pair<const key_type, mapped_type>.

最新文章

  1. OpenCascade Application Framework Introduction
  2. Suffix array
  3. C#访问非托管内存
  4. nodeJS分层
  5. VC连接mysql数据库错误:libmysql.lib : fatal error LNK1113: invalid machine 解决方法
  6. UIWebView与JS的深度交互
  7. Android(java)学习笔记132:ListViewProject案例(ListView + ArrayAdapter)
  8. Win32 GDI 非矩形区域剪裁,双缓冲技术
  9. move file create directory.
  10. linux笔记2.20
  11. Python3 如何优雅地使用正则表达式(详解三)
  12. Android之万能播放器解码框架Vitamio的介绍及使用
  13. Tomcat、JBOSS、WebSphere、WebLogic、Apache等技术概述
  14. I\O操作
  15. web新手——新闻列表这样写不容易出错
  16. window7安装python的xgboost库方法
  17. python创建目录保存文件
  18. Error: java.lang.NullPointerException at outputformat.MysqlOutputFormat.getRecordWriter(MysqlOutputFormat.java:27)
  19. AOP-方法拦截器-笔记
  20. JS 中document.URL 和 windows.location.href 的区别

热门文章

  1. mnesia练习及基本操作
  2. Python学习笔记14:标准库之信号量(signal包)
  3. babylon使用3dsmax导出的obj文件时模型偏暗
  4. .Net 中的反射(动态创建类型实例)
  5. iOS进程间通信之CFMessagePort
  6. Refusing to install package with name “XXXX”
  7. ftp上传文件不能上传到指定的文件夹
  8. node.js npm 安装spm失败,竟然是版本的问题
  9. Centos查看端口占用情况
  10. Windows窗口程序从创建到关闭产生的消息