码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode 436. Find Right Interval

时间:2017-02-14 21:38:45      阅读:559      评论:0      收藏:0      [点我收藏+]

标签:思路   int end   medium   called   tput   set   this   store   puts   

436. Find Right Interval

Description Submission Solutions Add to List

  • Total Accepted: 7209
  • Total Submissions: 17507
  • Difficulty: Medium
  • Contributors: love_FDU_llp

 

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.

Subscribe to see which companies asked this question.

【题目分析】

这个题目的意思是:给定一系列的区间,对于任意一个区间,在所有区间中找到一个区间的起始点大于等于当前区间的结束点,并且要求这两个点最接近。

【思路】

首先对所有区间的起始点进行排序,然后对于每一个区间使用二分查找来找到与这个区间结束点最接近的起始点的区间,并且获得该区间的索引。

【实现】

在讨论区看到java的解法好多是用TreeMap来实现的,这样的实现代码简洁,但是要求大家对java比较熟练。

 1 /**
 2  * Definition for an interval.
 3  * public class Interval {
 4  *     int start;
 5  *     int end;
 6  *     Interval() { start = 0; end = 0; }
 7  *     Interval(int s, int e) { start = s; end = e; }
 8  * }
 9  */
10 public class Solution {
11     public int[] findRightInterval(Interval[] intervals) {
12         int[] result = new int[intervals.length];
13         
14         TreeMap<Integer, Integer> treemap = new TreeMap<>();
15         
16         for(int i = 0; i < intervals.length; i++) {
17             treemap.put(intervals[i].start, i);
18         }
19         
20         for(int i = 0; i < intervals.length; i++) {
21             Map.Entry<Integer, Integer> item = treemap.ceilingEntry(intervals[i].end);
22             result[i] = (item == null) ? -1 : item.getValue();
23         }
24         
25         return result;
26     }
27 }

 

LeetCode 436. Find Right Interval

标签:思路   int end   medium   called   tput   set   this   store   puts   

原文地址:http://www.cnblogs.com/liujinhong/p/6399135.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!