查找在 Python 中可以兑换钞票的最小时间


假设有 n 个收银员正在兑换钱款,目前,第 i 个收银员前面有 ki 个人。现在,排队到第 i 个收银员的第 j 个人有 m[i,j] 张钞票。我们必须找到最早可以兑换钞票的时间。我们必须记住,收银员扫描一张钞票需要 5 秒。完成每个顾客所有钞票的扫描后,他/她需要 15 秒来兑换钞票。

因此,如果输入类似于 输入:n = 6,k = [12, 12, 12, 12, 12, 12]

7897961099678
10710989999656
9889867910667
769669896689
98765108107668
876579796557

则输出将为 585,因为收银员需要 5 秒来扫描每个顾客的每张钞票,所以加上 5*m[I,j]。现在每个收银员每位顾客需要 15 秒,所以将 15*k[] 加到答案中。计算每个收银员所需时间后,所需的最短时间将是答案。因此,收银员 m[5] 所需的最短时间为 585。

为了解决这个问题,我们将遵循以下步骤:

  • n := k 的大小

  • minimum := 99999

  • 对于 i 从 0 到 n,执行

    • temp := k[i] * 15

    • 对于 j 从 0 到 k[i],执行

      • temp := temp + m[i, j] * 5

    • 如果 temp < minimum,则

      • minimum := temp

  • 返回 minimum

示例

让我们看看下面的实现,以便更好地理解:

 在线演示

def minTimeToExchange(k, m):
   n = len(k)
   minimum = 99999
   for i in range(n):
      temp = k[i] * 15
   for j in range(k[i]):
      temp += m[i][j] * 5
   if temp < minimum:
      minimum = temp
   return minimum

k = [12, 12, 12, 12, 12, 12]
m = [
   [7,8,9,7,9,6,10,9,9,6,7,8],
   [10,7,10,9,8,9,9,9,9,6,5,6],
   [9,8,8,9,8,6,7,9,10,6,6,7],
   [7,6,9,6,6,9,8,9,6,6,8,9],
   [9,8,7,6,5,10,8,10,7,6,6,8],
   [8,7,6,5,7,9,7,9,6,5,5,7]]
print(minTimeToExchange(k, m))

输入

[12, 12, 12, 12, 12, 12],
[[7,8,9,7,9,6,10,9,9,6,7,8],
[10,7,10,9,8,9,9,9,9,6,5,6],
[9,8,8,9,8,6,7,9,10,6,6,7],
[7,6,9,6,6,9,8,9,6,6,8,9],
[9,8,7,6,5,10,8,10,7,6,6,8],
[8,7,6,5,7,9,7,9,6,5,5,7]]

输出

585

更新于:2020年8月27日

77 次浏览

开启你的职业生涯

完成课程获得认证

开始
广告