博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode]436 Find Right Interval
阅读量:5098 次
发布时间:2019-06-13

本文共 2435 字,大约阅读时间需要 8 分钟。

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.

解法: 把这些interval按照start从小到大排序,然后对每一个interval用其end去在排好序的队列里面做二分查找, 找到符合要求的一个interval。代码:
public int[] findRightInterval(Interval[] intervals){        Interval[] sortedIntervals = Arrays.copyOf(intervals,intervals.length);        Arrays.sort(sortedIntervals,(o1, o2) -> o1.start - o2.start);        int[] result = new int[intervals.length];        for (int i = 0; i < intervals.length; i++) {            Interval current = intervals[i];            int insertIndex = Arrays.binarySearch(sortedIntervals, current, (o1, o2) -> o1.start - o2.end);            if (insertIndex < 0){                insertIndex = -insertIndex - 1;            }            if (insertIndex == intervals.length){                result[i] = -1;            }else {                Interval match = sortedIntervals[insertIndex];                for (int j = 0; j < intervals.length; j++){                    if (i != j && match.start == intervals[j].start && match.end == intervals[j].end){                       // System.out.println(",old index:"+j);                        result[i] = j;                    }                }            }        }        return result;    }

 

转载于:https://www.cnblogs.com/javanerd/p/6061042.html

你可能感兴趣的文章
一些方便系统诊断的bash函数
查看>>
【转载】基于vw等viewport视区相对单位的响应式排版和布局
查看>>
<转>关于MFC的多线程类 CSemaphore,CMutex,CCriticalSection,CEvent
查看>>
jquery中ajax返回值无法传递到上层函数
查看>>
css3之transform-origin
查看>>
[转]JavaScript快速检测浏览器对CSS3特性的支持
查看>>
Master选举原理
查看>>
[ JAVA编程 ] double类型计算精度丢失问题及解决方法
查看>>
小别离
查看>>
微信小程序-发起 HTTPS 请求
查看>>
WPF动画设置1(转)
查看>>
backgound-attachment属性学习
查看>>
个人作业——关于K米的产品案例分析
查看>>
基于node/mongo的App Docker化测试环境搭建
查看>>
java web 中base64传输的坑
查看>>
java 中的线程(一)
查看>>
秒杀9种排序算法(JavaScript版)
查看>>
素数判断BFS之“Prime Path”
查看>>
Activiti入门 -- 环境搭建和核心API简介
查看>>
struts.convention.classes.reload配置为true,tomcat启动报错
查看>>