Advertisement
352. Data Stream as Disjoint Intervals
UnknownView on LeetCode
352.cs
C#
public class SummaryRanges
{
private SortedDictionary<int, int[]> intervals = new SortedDictionary<int, int[]>();
public SummaryRanges()
{
}
public void AddNum(int val)
{
if (intervals.ContainsKey(val))
return;
// the maximum key in `intervals` < `key`
intervals.TryGetValue(val - 1, out int[] lo);
// the minimum key in `intervals` > `key`
intervals.TryGetValue(val + 1, out int[] hi);
// {lo, intervals[lo][1]} + val + {hi, intervals[hi][1]} = {lo, intervals[hi][1]}
if (lo != null && hi != null && lo[1] + 1 == val && val + 1 == hi[0])
{
lo[1] = hi[1];
intervals.Remove(hi[0]);
}
else if (lo != null && lo[1] + 1 >= val)
lo[1] = Math.Max(lo[1], val);
else if (hi != null && val + 1 == hi[0])
{
intervals[val] = new int[] { val, hi[1] };
intervals.Remove(hi[0]);
}
else
intervals[val] = new int[] { val, val };
}
public int[][] GetIntervals()
{
return intervals.Values.ToArray();
}
}
/**
* Your SummaryRanges object will be instantiated and called as such:
* SummaryRanges obj = new SummaryRanges();
* obj.AddNum(value);
* int[][] param_2 = obj.GetIntervals();
*/Advertisement
Was this solution helpful?