php - 奖励预算削减 (PHP)
问题描述
这是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));
这是我的第一次尝试,它奏效了。但是,我认为这本可以更好地解决。
我可以做些什么来改进我的代码吗?谢谢!
解决方案
您应该尝试减少计算的重复,以便可以在foreach
循环之前计算出最大预算。也不要if
检查它是否高于这个值,然后使用min
最低的条目和最大的预算
function findGrantsCap($grantsArray, $newBudget) : array {
$maxBudget = $newBudget / count($grantsArray);
$newArray = [];
foreach($grantsArray as $entry) {
$newArray[] = min ( $entry, $maxBudget);
}
return $newArray;
}
推荐阅读
- hyperledger-fabric - IBM Blockchain v2 上的 getState():加载时间过长
- r - 如何选择所有列以及附加表达式
- asp.net-mvc - HTML Actionlink 中的 ASP Route Data 属性
- ios - viewForSupplementaryElementOfKind 没有被调用
- swift - 将结构数组中的 UIColor 保存到 UserDefaults
- html - 页面没有响应 Div 标签
- angular-material - Angular Material:为什么 mat-form 没有将 mat-hint 包裹在里面?
- python - 递归函数下只在if语句中返回
- vba - 从字符串中间删除零
- powerbi - 如何在 PowerBI 的矩阵视觉中将度量显示为子列