编程开发人员的招聘挑战问题

时间:2018-09-23 10:14:20

标签: algorithm dynamic greedy

一家软件公司中有N个团队。第 i th 团队中有B i 名员工,总预算为A i 个货币单位。每个团队必须将预算平均分配给员工。但是对于某些团队来说,这是不可能的。因此,公司必须在其团队的预算中进行修改。在一个修订版本中,要修订 i th 团队的预算,前i个团队的预算必须增加1。您的任务是找到最小修订版本因此,对于每个团队来说,可以在员工之间平均分配预算。

示例案例:(A 1 B 1 ),(A 2 B 2 ),(A 3 B 3 ):(1 1),(3 7),(5 4)。

解决方案为 4 。初始预算(1,3,5)->(2,4,5)->(5,7,8)

1 个答案:

答案 0 :(得分:2)

给定的问题可以通过建设性的解决方案来解决。首先,让我们 inc i 表示每个 A i 要增加的金额,使得总和( A i + inc i )可以在 B i 员工。这里要进行的两个观察是:

  • A i + inc i )mod B i 等于0表示要平均分配的金额
  • inc i <= inc i-1 ,因为我们总是在前缀从索引1开始的时尚,因此 inc i-sub > inc i-1 是不可能的,因为 inc i- 1 将始终在 inc i
  • 之前递增

使用这两个观察结果,我们可以从从右到左开始遍历给定数组,并在每一步确定 inc i 的值 inc i 的值应为( c * B i -A i ),其中 c 是最小的整数值,使得 c * B i > = A i 和(< em> c * B i -A i )> = inc i + 1 值可以在O(1)中计算,因为我们可以对方程进行改革以估计 c ,-

的值
  • c> =(A i / B i
  • c> =(A i + inc i + 1 )/ B i < / em>

因此 c = max (ceil(A i / B i < / sub>),ceil((A i + inc i + 1 )/ B i

因此,给定解决方案的整体复杂度为 O(n),最终解决方案是 inc 1 的值(假设1 -索引)