」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 。最小的範圍覆蓋K列表中的元素

。最小的範圍覆蓋K列表中的元素

發佈於2025-03-23
瀏覽:420

632。最小的範圍涵蓋了k列表的元素. Smallest Range Covering Elements from K Lists [2

台詞:

您在

non-decreasing Order 中的k列表。查找範圍的

範圍,該範圍至少包含一個k列表中的一個數字。

我們定義範圍[a,b]小於範圍[c,d]如果b -a 或 a

nums = [[4,10,15,24,26],[0,9,12,20],[5,18,22,30]] [20,24]

解釋:

列表1:[4,10,15,24,26],24在範圍內[20,24]。

列表2:[0,9,12,20],20在範圍內[20,24]。 列表3:[5,18,22,30],22在範圍內[20,24]。

    [2
  • [2
  • [2
  • nums.length == k
  • 1 1
      -10
    • 5
    • 5
    • num [i]在
    non-decreasing order。

解決方案:

    我們可以使用一個
  • min-heap (或優先級隊列)來跟踪每個列表中的最小元素,同時維護滑動窗口以查找最小的範圍,其中包括每個列表中至少一個元素。 方法
  • Min-heap初始化
  • :使用Min-Heap存儲每個K列表中的當前元素。每個堆條目將是一個包含值的元組,其列表的索引以及該列表中元素的索引。

最大值跟踪:在當前窗口中跟踪最大值。這很重要,因為範圍是由最小元素(來自堆)和當前最大值之間的差異決定的。

    迭代直到列表的結尾
  • :對於每次迭代:
  • 從堆中提取最小元素。
  • 如果當前範圍[min_value,max_value]更新範圍,則小於先前記錄的最小範圍。
  • 轉到獲取最小元素的列表中的下一個元素。更新最大值,然後將新元素添加到堆中。
  • :耗盡任何列表時的過程結束。
  • 讓我們在PHP中實現此解決方案: 632。最小的範圍覆蓋k列表的元素

解釋:

堆初始化

初始堆包含每個列表中的第一個元素。我們還跟踪第一個元素之間的最大元素。
  1. 處理堆
  2. 從堆中提取最小元素,然後嘗試通過從同一列表中添加下一個元素來擴展範圍(如果可用)。
  3. 在堆上添加新元素後,如果新元素更大,則更新MaxValue。 只要MaxValue和MinValue之間的差異小於先前記錄的範圍。
    • 終止
    • 當任何列表耗盡元素時,循環停止,因為我們不能再包含該範圍內的所有列表。
  4. 複雜性分析

:o(n * log k),其中n是所有列表中元素的總數,k是列表的數量。複雜性來自從堆中插入和刪除元素。
:o(k)用於在堆中存儲元素。


如果您發現此系列有幫助,請考慮在Github上給

如果您想要這樣的更多有用的內容,請隨時關注我:
  1. [2 [2

    版本聲明 本文轉載於:https://dev.to/mdarifulhaque/632-smallest-range-covering-elements-from-k-lists-30d4?1如有侵犯,請聯繫[email protected]刪除
    最新教學 更多>

    免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

    Copyright© 2022 湘ICP备2022001581号-3