找到最短时间
Find the minimum time
问题陈述是->
我们想用两台扫描仪扫描N份文件。设S1和S2分别为扫描仪1和扫描仪2扫描单个文档所用的时间,求扫描完所有N个文档所需的最短时间
示例:-
S1 = 2,S2 = 4,N = 2
输出:4
解释:这里有两种可能。
在扫描仪 1 中扫描两个文档或
在每台扫描仪中扫描一份文件。
在这两种情况下,所需时间都是 4.
我想出了一个解决方案,我们找到所有的组合并将它们插入到集合中。最小值将是集合中的第一个元素。
问题是解决方案的时间复杂度为 O(n),但可接受的时间复杂度为 O(logn)。
我正在考虑二分查找的思路,但想不出一个解决方案。
方法应该是什么?
如果您可以扫描文档的一小部分,最快的方法是在扫描仪 1 中扫描 N*S2/(S1+S2)
个文档,在扫描仪 2 中扫描 N*S1/(S1+S2)
个文档。如果这些不是整数,您必须将其中一项向上舍入,将其中一项向下舍入,这样您就可以检查两种可能性。这是 O(1),而不是 O(log n)。
好吧,我正在分享 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/
问题陈述是->
我们想用两台扫描仪扫描N份文件。设S1和S2分别为扫描仪1和扫描仪2扫描单个文档所用的时间,求扫描完所有N个文档所需的最短时间
示例:-
S1 = 2,S2 = 4,N = 2
输出:4
解释:这里有两种可能。 在扫描仪 1 中扫描两个文档或 在每台扫描仪中扫描一份文件。 在这两种情况下,所需时间都是 4.
我想出了一个解决方案,我们找到所有的组合并将它们插入到集合中。最小值将是集合中的第一个元素。
问题是解决方案的时间复杂度为 O(n),但可接受的时间复杂度为 O(logn)。
我正在考虑二分查找的思路,但想不出一个解决方案。
方法应该是什么?
如果您可以扫描文档的一小部分,最快的方法是在扫描仪 1 中扫描 N*S2/(S1+S2)
个文档,在扫描仪 2 中扫描 N*S1/(S1+S2)
个文档。如果这些不是整数,您必须将其中一项向上舍入,将其中一项向下舍入,这样您就可以检查两种可能性。这是 O(1),而不是 O(log n)。
好吧,我正在分享 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/