iT邦幫忙

2025 iThome 鐵人賽

0

Insert Interval

LeetCode 57 題意

  • 在一組已排序、不重疊的區間中,插入一個新的區間,並保證最後結果仍然是排序且不重疊的。
  • Ex.
    Input: intervals = [[1,3],[6,9]], newInterval = [2,5]
    Output: [[1,5],[6,9]]

thoughts

  • 遍歷所有區間,分三類:
    • 完全在 newInterval 左邊 → 直接放入結果。
    • 完全在 newInterval 右邊 → 先把合併好的 newInterval 放入,再放當前區間。
    • 重疊 → 更新 newInterval 的範圍。
  • 時間:O(n)
  • 空間:O(n)

Kotlin

fun insert(intervals: Array<IntArray>, newInterval: IntArray): Array<IntArray> {
    val result = mutableListOf<IntArray>()
    var interval = newInterval

    for (i in intervals) {
        when {
            i[1] < interval[0] -> result.add(i)  // 在左邊
            i[0] > interval[1] -> {              // 在右邊
                result.add(interval)
                interval = i
            }
            else -> {  // 重疊
                interval[0] = minOf(interval[0], i[0])
                interval[1] = maxOf(interval[1], i[1])
            }
        }
    }
    result.add(interval)
    return result.toTypedArray()
}

Follow-up

  • 如果需要頻繁插入,是否該用平衡樹 / Segment Tree 優化?
  • 如何處理多維度插入, 例如時間 + 地點?
  • 如果輸入規模高達百萬,如何避免 O(n) 的遍歷?

上一篇
#24
系列文
來都來了-涮就涮吧26
  1. 22
    #21
  2. 23
    #22
  3. 24
    #23
  4. 25
    #24
  5. 26
    #25
完整目錄
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言