【问题标题】:Find the time interval with max number of concurrent processes查找具有最大并发进程数的时间间隔
【发布时间】:2016-06-08 21:35:33
【问题描述】:

系统生成以下格式的日志:startTime、endTime、Request。 如何计算最大并发请求数的间隔? 我尝试使用带有时间戳的哈希图作为键请求计数作为值。使用每个请求和更新计数器的 start 和 time 之间的所有值填充键,但如果时间戳精确到毫秒,这将需要巨大的空间。

【问题讨论】:

  • 不妨看看 Guava 的 RangeMap。
  • 从左到右扫描,跟踪未终止间隔的数量。

标签: java algorithm data-structures


【解决方案1】:

将列表转换为具有 ts, value 属性的事件

startTime: 123456, endTime:23456, Request: ....变成两个事件:

(123456, 1) (23456, -1)

现在,您将拥有 2 倍的请求数量作为事件。

如果您按时间戳对这些事件进行排序,则可以对它们进行迭代,添加和减去值。跟踪您看到的最大值及其发生的时间戳。

这在 O(nlogn) 中运行,因为您需要对事件进行排序并占用 O(n) 空间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-16
    • 1970-01-01
    • 2017-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多