Advertisement
Alexxik

Untitled

Sep 14th, 2023
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 1.51 KB | None | 0 0
  1. // MARK: - 56. Merge Intervals
  2.  
  3. // Есть список интервалов, нужно объединить интервалы которые возможно объединить
  4. // Input: intervals = [[1,3],[2,6],[8,10],[15,18]]
  5. // Output: [[1,6],[8,10],[15,18]]
  6.  
  7. // Решение
  8. // Нужно отсортировать интервалы по возрастанию первого числа
  9. // Потом пройтись по каждому и смотреть меньше ли (начало текущего) (конца предидущего) и объединять или нет
  10. // Нужно отдельно обработать ситуацию когда один интервал входит в другой: [1, 4], [ 2, 3]
  11.  
  12. func merge(_ intervals: [[Int]]) -> [[Int]] {
  13.     let sorted = intervals.sorted {$0[0] < $1[0]}
  14.     var result = [[Int]]()
  15.    
  16.     var prevInterval = sorted[0]
  17.    
  18.     for interval in sorted {
  19.        
  20.         if interval[0] <= prevInterval[1] {
  21.             // проверяем ситуацию когда один интервал входит в другой
  22.             let maxEnd = max(prevInterval[1], interval[1])
  23.             prevInterval = [prevInterval[0], maxEnd]
  24.         } else {
  25.             result.append(prevInterval)
  26.             prevInterval = interval
  27.         }
  28.     }
  29.     // Обрабатываем последний элемент
  30.     result.append(prevInterval)
  31.     return result
  32. }
  33.  
  34. var intervals = [[15,18],[2,6],[1,3],[8,10]]
  35. merge(intervals)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement