C
C# | LeetCode
@easy_c_sharp_task3.4K подп.
243просмотров
7.2%от подписчиков
17 марта 2026 г.
statsScore: 267
Задача: 352. Data Stream as Disjoint Intervals Сложность: hard Дано поступление данных из последовательности неотрицательных целых чисел a1, a2, ..., an, необходимо обобщить увиденные числа в виде списка непересекающихся интервалов. Реализуйте класс SummaryRanges: SummaryRanges() Инициализирует объект с пустым потоком. void addNum(int value) Добавляет целое число в поток. int[][] getIntervals() Возвращает обобщение текущих чисел в потоке в виде списка непересекающихся интервалов [starti, endi]. Ответ должен быть отсортирован по starti. Пример: Input ["SummaryRanges", "addNum", "getIntervals", "addNum", "getIntervals", "addNum", "getIntervals", "addNum", "getIntervals", "addNum", "getIntervals"] [[], [1], [], [3], [], [7], [], [2], [], [6], []] Output [null, null, [[1, 1]], null, [[1, 1], [3, 3]], null, [[1, 1], [3, 3], [7, 7]], null, [[1, 3], [7, 7]], null, [[1, 3], [6, 7]]] 👨‍💻 Алгоритм: 1⃣Используйте SortedSet<int>, чтобы автоматически сохранять отдельные элементы в отсортированном виде. 2⃣AddNum(value)— просто добавить элемент в SortedSet, дубликаты автоматически теряются. 3⃣GetIntervals()— проходим поSortedSet если текущий элемент продолжает текущий интервал ( value == right + 1) — расширение его в противном случае сохраняем текущий интервал и начинаем новый после цикла добавление последней интервала 😎 Решение: using System; using System.Collections.Generic; public class SummaryRanges { private SortedSet<int> values; public SummaryRanges() { values = new SortedSet<int>(); } public void AddNum(int value) { values.Add(value); } public List<int[]> GetIntervals() { var intervals = new List<int[]>(); if (values.Count == 0) { return intervals; } int left = -1, right = -1; foreach (var value in values) { if (left < 0) { left = right = value; } else if (value == right + 1) { right = value; } else { intervals.Add(new int[] { left, right }); left = right = value; } } intervals.Add(new int[] { left, right }); return intervals; } } // Example usage public class Program { public static void Main() { SummaryRanges sr = new SummaryRanges(); sr.AddNum(1); sr.AddNum(3); sr.AddNum(7); sr.AddNum(2); sr.AddNum(6); List<int[]> intervals = sr.GetIntervals(); foreach (var interval in intervals) { Console.WriteLine(&#036;"{interval[0]} {interval[1]}"); } } } Ставь 👍 и забирай 📚 Базу знаний
243
просмотров
2650
символов
Да
эмодзи
Нет
медиа

Другие посты @easy_c_sharp_task

Все посты канала →
Задача: 352. Data Stream as Disjoint Intervals Сложность: ha — @easy_c_sharp_task | PostSniper