LeetCode_352将数据流变为多个不相交区间

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

例如,假设数据流中的整数为 1,3,7,2,6,…,每次的总结为:
在这里插入图片描述
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/data-stream-as-disjoint-intervals
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

class SummaryRanges {

    TreeSet<Integer> set = null;

    /** Initialize your data structure here. */
    public SummaryRanges() {
        set = new TreeSet<Integer>();
    }
    
    public void addNum(int val) {
        set.add(val);
    }
    
    public int[][] getIntervals() {
        List<int[]> list = new LinkedList<int[]>();
        int[] nums = new int[2];
        Iterator<Integer> it = set.iterator();
        while(it.hasNext()){
            int num = it.next();
            if(set.contains(num-1) && set.contains(num+1)){//num是区间的里面的点
                continue;
            }
            if(!set.contains(num-1) && !set.contains(num+1)){//num是区间单独的点
                nums[0] = num;
                nums[1] = num;
                list.add(nums);
                nums = new int[2];
                continue;
            }
            if(!set.contains(num-1) && set.contains(num+1)){//num是区间的左端点
                nums[0] = num;
                continue;
            }
            if(set.contains(num-1) && !set.contains(num+1)){//num是区间的右端点
                nums[1] = num;
                list.add(nums);
                nums = new int[2];
                continue;
            }
        }
        int len = list.size();
        int[][] res = new int[len][2];
        for(int i=0;i<len;i++){
            res[i][0] = list.get(i)[0];
            res[i][1] = list.get(i)[1];
        }
        return res;
    }
}

/**
 * Your SummaryRanges object will be instantiated and called as such:
 * SummaryRanges obj = new SummaryRanges();
 * obj.addNum(val);
 * int[][] param_2 = obj.getIntervals();
 */
发布了250 篇原创文章 · 获赞 0 · 访问量 1226

猜你喜欢

转载自blog.csdn.net/qq_36198826/article/details/104033914