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中文網其他相關文章!