• 436. Find Right Interval


    http://www.cnblogs.com/EdwardLiu/p/6139796.html

    https://leetcode.com/problems/find-right-interval/#/solutions

    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:
    You may assume the interval's end point is always bigger than its start point.
    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.

    Solution 1: TreeMap,      Time complexity: O(NlogN)

    像这种在一个集合里面寻找有没有比某个数小的数,一般要么treeMap要么treeSet。Interval的题经常需要用treeMap, Data Stream as Disjoint Intervals 就是

    This implementation provides guaranteed log(n) time cost for the containsKeygetput and remove operations. 

    map.higherEntry(key) 找到的是一个entry with least key strictly greater than the given key, 所以20行要减一,因为interval.start可能跟current interval.end重合

    用map.cellingEntry(key)找的就是一个entry with least key greater than or equal to the given key

    map.lowerKey(key) Returns the greatest key strictly less than the given key, or null if there is no such key.

    map.floorKey(key) Returns the greatest key less than or equal to the given key, or null if there is no such key.

    关键是找键值对和根据什么遍历, 会根据数组构造类, 会用map.higherEntry(key)

    /**
     * Definition for an interval.
     * public class Interval {
     *     int start;
     *     int end;
     *     Interval() { start = 0; end = 0; }
     *     Interval(int s, int e) { start = s; end = e; }
     * }
     */
    public class Solution {
        public int[] findRightInterval(Interval[] intervals) {
            if(intervals==null || intervals.length==0) return null;
            int[] res = new int[intervals.length];
            TreeMap<Integer, Integer> map = new TreeMap<Integer, Integer>();
            for (int i=0; i<intervals.length; i++) {
                map.put(intervals[i].start, i);
            }
            for (int i=0; i<intervals.length; i++) {
                Interval cur = intervals[i];
                Map.Entry<Integer, Integer> entry = map.higherEntry(cur.end-1);
                if (entry != null) {
                    res[i] = entry.getValue();
                }
                else res[i] = -1;
            }
            return res;
        }
    }
    

      

     Map.Entry接口
      Map的entrySet()方法返回一个实现Map.Entry接口的对象集合。集合中每个对象都是底层Map中一个特定的键/值对。

      通过这个集合的迭代器,您可以获得每一个条目(唯一获取方式)的键或值并对值进行更改。当条目通过迭代器返回后,除非是迭代器自身的remove()方法或者迭代器返回的条目的setValue()方法,其余对源Map外部的修改都会导致此条目集变得无效,同时产生条目行为未定义。
      (1) Object getKey(): 返回条目的关键字
      (2) Object getValue(): 返回条目的值
      (3) Object setValue(Object value): 将相关映像中的值改为value,并且返回旧值

  • 相关阅读:
    java 模拟http请求,通过流(stream)的方式,发送json数据和文件
    $listeners 在vue中的使用 --初学
    vue中关于checkbox数据绑定v-model指令说明
    Vue--理解非prop特性
    Vue里标签嵌套限制问题解决------解析DOM模板时注意事项:
    vue click.stop
    @click.prevent.self和@click.self.prevent区别
    assign()-JS
    摘抄大神对VUE 中slot-scope的深度理解
    oracle11G备份空表解决办法
  • 原文地址:https://www.cnblogs.com/apanda009/p/7067425.html
Copyright © 2020-2023  润新知