LeetCode解题笔记 45 —— 352. 将数据流变为多个不相交区间

题目

给定一个非负整数的数据流输入 a1,a2,…,an,…,将到目前为止看到的数字总结为不相交的区间列表。

例如,假设数据流中的整数为 1,3,7,2,6,…,每次的总结为:

[1, 1]
[1, 1], [3, 3]
[1, 1], [3, 3], [7, 7]
[1, 3], [7, 7]
[1, 3], [6, 7]

 

进阶:
如果有很多合并,并且与数据流的大小相比,不相交区间的数量很小,该怎么办?

 

解法

class SummaryRanges {
    List<int[]> list;
    Set<Integer> set;
    /** Initialize your data structure here. */
    public SummaryRanges() {
        list = new ArrayList<>();
        set = new HashSet();
    }
    
    public void addNum(int val) {
        if(set.contains(val)){
            return;
        }
        set.add(val);
        for(int i = 0; i < list.size(); i++){
            if(list.get(i)[0] > val){
                if(list.get(i)[0] == val+1){
                    list.get(i)[0] =val;
                }else{
                    int[] o = new int[]{val,val};
                    list.add(i, o);
                }
                return;
            }
            if(list.get(i)[1] > val){
                return;
            }
            if(list.get(i)[1] == val - 1){
                list.get(i)[1] = val;
                if(i < list.size()-1 && list.get(i+1)[0] == val+1){
                    list.get(i+1)[0] = list.get(i)[0];
                    list.remove(i);
                }
                return;
            }
        }
        if(list.size()>0 && list.get(list.size()-1)[1] == val-1){
            list.get(list.size()-1)[1] = val;
        }else{
            int[] o = new int[]{val,val};
            list.add(o);
        }
    }
    
    public int[][] getIntervals() {
        int[][] res = new int[list.size()][];
        for(int i = 0; i < list.size(); i++){
            res[i] = list.get(i);
        }
        return res;
    }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值