【问题标题】:Award Budget Cuts (PHP) [closed]奖励预算削减(PHP)[关闭]
【发布时间】:2021-08-29 20:55:16
【问题描述】:

这是 Pramp 上的一个问题。问题:

您的母校(即您的学院/大学)的奖励委员会请求您协助解决他们面临的预算分配问题。最初,委员会计划今年提供 N 项研究经费。然而,由于支出削减,预算减少到新预算美元,现在他们需要重新分配赠款。委员会做出决定,他们希望通过对所有赠款应用最高上限来影响尽可能少的赠款接受者。最初计划高于上限的每笔赠款现在将完全是上限美元。显然,小于或等于上限的赠款不会受到影响。

给定一个数组grantsArray,包含原始授权和减少的授权 预算newBudget,写一个函数findGrantsCap,在 最有效的方式是一个上限,使得收件人数量最少 受到影响并且满足新的预算约束(即总和 N 重新分配的赠款等于 newBudget)。

分析解决方案的时间和空间复杂性。

这就是我在 PHP 中的解决方案。

$grantsArray = [61, 56, 87, 93, 55, 27];
$newBudget = 170;

function findGrantsCap($grantsArray, $newBudget) : array {
  $newArray = [];
  foreach($grantsArray as $entry) {
    if(!($entry <= $newBudget / count($grantsArray))) {
      array_push($newArray, $newBudget / count($grantsArray));
    } else {
      array_push($newArray, $entry);
    }
  }
  return $newArray;
}

print_r(findGrantsCap($grantsArray, $newBudget));

这是我的第一次尝试,它成功了。不过,我认为这本可以更好地解决。

我可以做些什么来改进我的代码吗?谢谢!

【问题讨论】:

标签: php arrays algorithm


【解决方案1】:

您应该尝试减少计算的重复次数,以便在foreach 循环之前计算出最大预算。也不要使用if 来检查它是否高于此值,然后使用min 来获取最低的条目和最大的预算

function findGrantsCap($grantsArray, $newBudget) : array {
    $maxBudget = $newBudget / count($grantsArray);
    $newArray = [];
    foreach($grantsArray as $entry) {
        $newArray[] = min ( $entry, $maxBudget);
    }
    return $newArray;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多