跳到主要内容

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

链接:352.将数据流变为多个不相交区间
难度:Hard
标签:设计、二分查找、有序集合
简介:给你一个由非负整数 a1, a2, ..., an 组成的数据流输入,请你将到目前为止看到的数字总结为不相交的区间列表。

题解 1 - typescript

  • 编辑时间:2021-10-09
  • 执行用时:180ms
  • 内存消耗:48.5MB
  • 编程语言:typescript
  • 解法介绍:二分插入。
class SummaryRanges {
private set = new Set<number>();
private list: number[] = [];
addNum(val: number): void {
if (this.set.has(val)) return;
this.set.add(val);
let l = 0;
let r = this.list.length - 1;
if (this.list[r] < val) {
this.list.push(val);
return;
}
while (l < r) {
const mid = (l + r) >> 1;
if (this.list[mid] > val) r = mid;
else l = mid + 1;
}
this.list.splice(l, 0, val);
}
getIntervals(): number[][] {
const ans: number[][] = [];
for (let i = 0, l = this.list.length; i < l; i++) {
const num = this.list[i];
const last = ans[ans.length - 1];
if (ans.length === 0 || last[1] + 1 < num) {
ans.push([num, num]);
} else {
last[1] = num;
}
}
return ans;
}
}