【问题标题】:Find the minimum time找出最短时间
【发布时间】:2021-09-04 10:42:19
【问题描述】:

问题陈述是->

我们想使用两台扫描仪扫描 N 个文档。如果 S1 和 S2 是扫描仪 1 和扫描仪 2 扫描单个文档所用的时间,求扫描所有 N 个文档所需的最短时间。

例子:-

S1 = 2,S2 = 4,N = 2

输出:4

解释:这里有两种可能性。 在扫描仪 1 中扫描两个文档或 在每个扫描仪中扫描一个文档。 在这两种情况下所需的时间都是 4。

我想出了一个解决方案,我们可以找到所有组合并将它们插入到集合中。最小值将是集合中的第一个元素。

问题是解决方案的时间复杂度为 O(n),但可接受的时间复杂度为 O(logn)。

我正在考虑二分搜索,但无法提出解决方案。

应该采用什么方法?

【问题讨论】:

    标签: c++ c++11 set binary-search


    【解决方案1】:

    如果您可以扫描文档的一小部分,最快的方法是在扫描仪 1 中扫描 N*S2/(S1+S2) 文档,在扫描仪 2 中扫描 N*S1/(S1+S2) 文档。如果这些不是整数,则必须将其中一个四舍五入向上,其中一个向下,这给了你两种检查的可能性。这是 O(1),而不是 O(log n)。

    【讨论】:

      【解决方案2】:

      好吧,我分享的是 O(log n) 方法。通过 ans / time 的二分查找,我们可以找到最佳时间。

      对于二分搜索,我们需要上限和下限。让我们假设下限为 0。现在我们需要找出上限。

      如果我们在一台扫描仪中扫描所有文档,所需的最短时间是多少。这将是 min (S1,S2) * N,对吗?注意:这里我们没有使用其他扫描仪,它可以在另一台忙时扫描文档。所以 min(S1,S2) * N 将是我们的上限。

      我们有自己的界限,

      下限 = 0

      上限 = min(S1,S2) * N

      现在准时做 BS,花点时间检查一下在中间时间内可以用扫描仪 1 扫描仪 2 扫描多少文档。每当扫描的文档总数 >= N 时,mid 可能是 ans .

      您可以从这里查看 BS - https://www.hackerearth.com/practice/algorithms/searching/binary-search/tutorial/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-04-13
        • 1970-01-01
        • 1970-01-01
        • 2017-12-29
        • 2015-06-07
        • 1970-01-01
        • 1970-01-01
        • 2012-05-28
        相关资源
        最近更新 更多