LeetCode 436. Find Right Interval

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 }
时间: 2024-10-13 16:21:20

LeetCode 436. Find Right Interval的相关文章

【一天一道LeetCode】#57. Insert Interval

一天一道LeetCode系列 (一)题目 Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary). You may assume that the intervals were initially sorted according to their start times. Example 1: Given intervals [1,3],[6,

436. Find Right Interval

Problem statement: 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

leetcode || 57、Insert Interval

problem: Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary). You may assume that the intervals were initially sorted according to their start times. Example 1: Given intervals [1,3],[6,9], insert a

LeetCode Problems List 题目汇总

No. Title Level Rate 1 Two Sum Medium 17.70% 2 Add Two Numbers Medium 21.10% 3 Longest Substring Without Repeating Characters Medium 20.60% 4 Median of Two Sorted Arrays Hard 17.40% 5 Longest Palindromic Substring Medium 20.70% 6 ZigZag Conversion Ea

过中等难度题目.0310

  .   8  String to Integer (atoi)    13.9% Medium   . 151 Reverse Words in a String      15.7% Medium     . 288 Unique Word Abbreviation      15.8% Medium     . 29 Divide Two Integers      16.0% Medium     . 166 Fraction to Recurring Decimal      17.

继续过中等难度.0309

  .   8  String to Integer (atoi)    13.9% Medium   . 151 Reverse Words in a String      15.7% Medium     . 288 Unique Word Abbreviation      15.8% Medium     . 29 Divide Two Integers      16.0% Medium     . 166 Fraction to Recurring Decimal      17.

LeetCode Insert Interval

原题链接在这里:https://leetcode.com/problems/insert-interval/ AC 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

[LeetCode]题解(python):057-Insert Interval

题目来源 https://leetcode.com/problems/insert-interval/ Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary). You may assume that the intervals were initially sorted according to their start times. Examp

LeetCode --- 57. Insert Interval

Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary). You may assume that the intervals were initially sorted according to their start times. Example 1: Given intervals [1,3],[6,9], insert and merge