2554。从范围 I
中选择的最大整数数难度:中等
主题:数组、哈希表、二分查找、贪婪、排序
给你一个被禁止的整数数组和两个整数 n 和 maxSum。您将按照以下规则选择一些整数:
返回您可以按照上述规则选择的最大个整数。
示例1:
示例2:
示例 3:
约束:
提示:
解决方案:
我们可以使用贪心方法,迭代从 1 到 n 的数字,跳过禁止的数字,并继续将有效数字(不在禁止数组中的数字)添加到运行总和中,直到达到 maxSum。
以下是分步解决方案:
让我们用 PHP 实现这个解决方案:2554。从范围 I
中选择的最大整数数
<?php /** * @param Integer[] $banned * @param Integer $n * @param Integer $maxSum * @return Integer */ function maxCount($banned, $n, $maxSum) { ... ... ... /** * go to ./solution.php */ } // Test cases echo maxCount([1, 6, 5], 5, 6); // Output: 2 echo "\n"; echo maxCount([1, 2, 3, 4, 5, 6, 7], 8, 1); // Output: 0 echo "\n"; echo maxCount([11], 7, 50); // Output: 7 ?>
将禁用数组转换为设置:
我们使用 array_flip($banned) 从被禁止的数组中创建一个集合,这允许 O(1) 查找来检查某个数字是否被禁止。
从 1 迭代到 n:
我们迭代从 1 到 n 的数字。对于每个数字:
返回计数:
循环结束后,我们返回所选整数的数量 ($count)。
$bannedSet = array_flip($banned);:这会将禁止列表转换为集合(关联数组)以进行快速查找。
for ($i = 1; $i :我们迭代从 1 到 n 的所有整数。
if (isset($bannedSet[$i])) { 继续; }:检查当前号码是否在禁止集中。如果是,我们就跳过它。
if ($sum $i > $maxSum) {break; }:如果添加当前数字超过 maxSum,我们将停止该过程。
$sum = $i; $count ;:如果数字有效并且相加不超过 maxSum,我们将其包含在总和中并增加计数。
输入:
输入 1: 禁止 = [1, 6, 5], n = 5, maxSum = 6
输入 2: 禁止 = [1, 2, 3, 4, 5, 6, 7], n = 8, maxSum = 1
输入 3: 禁止 = [11],n = 7,maxSum = 50
该解决方案可以在给定的约束条件下有效地处理问题。
联系链接
如果您发现本系列有帮助,请考虑在 GitHub 上给 存储库 一个星号或在您最喜欢的社交网络上分享该帖子?。您的支持对我来说意义重大!
如果您想要更多类似的有用内容,请随时关注我:
以上是从范围 I 中选择的最大整数数的详细内容。更多信息请关注PHP中文网其他相关文章!