Data Stream as Disjoint Intervals
HardBinary SearchDesignOrdered Set
Solution
export class SummaryRanges {
values: Set<number>;
constructor() {
this.values = new Set();
}
get isEmpty() {
return this.values.size === 0;
}
addNum(value: number): void {
this.values.add(value);
}
getIntervals(): number[][] {
if (this.isEmpty) {
return [];
}
const intervals = new Array<number[]>();
const values = [...this.values].sort((a, b) => a - b);
let [left, right] = [-1, -1];
for (const value of values) {
if (left < 0) {
right = value;
left = right;
} else if (value === right + 1) {
right = value;
} else {
intervals.push([left, right]);
right = value;
left = right;
}
}
intervals.push([left, right]);
return intervals;
}
}