”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 。最小的范围覆盖K列表中的元素

。最小的范围覆盖K列表中的元素

发布于2025-03-23
浏览:662

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