• 352. Data Stream as Disjoint Intervals


    /*
     * 352. Data Stream as Disjoint Intervals
     * 2016-7-12 by Mingyang
     * 这个题目做的时候一定要注意!就是我们这里讲的是点不是线段,所以点的插入就是简单多了
     * 不需要考虑同时与前面后面都发生交叉,要么在中间,要么被前面包围,要么被后面包围
     */
    class Interval {
        int start;
        int end;
        Interval() {
            start = 0;
            end = 0;
        }
        Interval(int s, int e) {
            start = s;
            end = e;
        }
    }
    class SummaryRanges {
        TreeMap<Integer, Interval> tree;
        public SummaryRanges() {
            tree = new TreeMap<>();
        }
        public void addNum(int val) {
            if (tree.containsKey(val))
                return;
            Integer l = tree.lowerKey(val);
            Integer h = tree.higherKey(val);
            if (l != null && h != null && tree.get(l).end + 1 == val && h == val + 1) {
            //首尾相连,无缝连接
                tree.get(l).end = tree.get(h).end;
                tree.remove(h);
            } else if (l != null && tree.get(l).end + 1 >= val) {
            //与前面交叉了,表明在前面的内部了
                tree.get(l).end = Math.max(tree.get(l).end, val);
            } else if (h != null && h == val + 1) {
            //刚好后面就是下一个key,被后面所吸收了
                tree.put(val, new Interval(val, tree.get(h).end));
                tree.remove(h);
            } else {
            //跟所有的不交叉,自己独立建立一个
                tree.put(val, new Interval(val, val));
            }
        }
        public List<Interval> getIntervals() {
            return new ArrayList<>(tree.values());
        }
    }
    /**
     * Your SummaryRanges object will be instantiated and called as such:
     * SummaryRanges obj = new SummaryRanges(); obj.addNum(val); List<Interval>
     * param_2 = obj.getIntervals();
     */
  • 相关阅读:
    jUnit4初探(1)
    关于冒泡排序与选择排序
    我对直接插入排序的一点理解
    Java中的Scanner类
    String数组与字符串类
    Redis知识点详解
    MySQL操作命令详解
    java中常见面试题整理
    Redis的安装部署
    zookeeper的伪集群部署步骤
  • 原文地址:https://www.cnblogs.com/zmyvszk/p/5666225.html
Copyright © 2020-2023  润新知