给定一个非负整数的数据流输入 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();
*/