Сложность: medium
Множество вещественных чисел можно представить как объединение нескольких несовпадающих интервалов, где каждый интервал имеет вид [a, b). Вещественное число x входит в множество, если один из его интервалов [a, b) содержит x (то есть a <= x < b). Вам дан отсортированный список непересекающихся интервалов, представляющих множество вещественных чисел, как описано выше, где intervals[i] = [ai, bi] представляет интервал [ai, bi). Вам также дан еще один интервал toBeRemoved. Верните набор вещественных чисел с интервалом toBeRemoved, удаленным из intervals. Другими словами, верните набор вещественных чисел, каждый x в котором находится в интервале, но не в toBeRemoved. Вашим ответом должен быть отсортированный список непересекающихся интервалов, как описано выше.
Пример:
Input: intervals = [[0,2],[3,4],[5,7]], toBeRemoved = [1,6]
Output: [[0,1],[6,7]]
👨💻 Алгоритм:
1⃣Интерируйтесь по каждому интервалу в списке intervals.
2⃣Для каждого интервала, проверяйте пересечения с toBeRemoved и обновляйте список результатов.
3⃣Добавляйте непересекающиеся части текущего интервала в результат.
😎 Решение:
using System;
using System.Collections.Generic;
public class Solution {
public IList<IList<double>> RemoveInterval(IList<IList<double>> intervals, IList<double> toBeRemoved) {
var result = new List<IList<double>>();
foreach (var interval in intervals) {
if (interval[0] < toBeRemoved[0]) {
result.Add(new List<double> { interval[0], Math.Min(interval[1], toBeRemoved[0]) });
}
if (interval[1] > toBeRemoved[1]) {
result.Add(new List<double> { Math.Max(interval[0], toBeRemoved[1]), interval[1] });
}
}
return result;
}
}
Ставь 👍 и забирай 📚 Базу знаний