搜尋
首頁後端開發php教程最小化分配到任何商店的產品數量

Minimized Maximum of Products Distributed to Any Store

2064。最小化分配到任何商店的產品數量

難度:

主題:陣列、二分查找

給你一個整數n,表示有n家專賣零售店。有 m 個不同數量的產品類型,以 0 索引 整數數組數量形式給出,其中數量[i] 表示第 ith 個產品類型的產品數量。

您需要依照以下規則將所有產品分送到零售店:

  • 一家商店只能提供至多一種產品類型,但可以提供任意數量。
  • 分發後,每個商店都會獲得一定數量的產品(可能是0)。令 x 代表向任何商店提供的最大產品數量。您希望 x 盡可能小,即您希望最小化向任何商店提供的最大產品數量。

回傳最小可能的x

範例1:

  • 輸入: n = 6,數量 = [11,6]
  • 輸出: 3
  • 解釋: 一個最佳方法是:
    • 類型 0 的 11 種產品分配給前四家商店,數量如下:2, 3, 3, 3
    • 類型 1 的 6 種產品按以下數量分發給其他兩家商店:3, 3
    • 給予任何商店的最大產品數量為 max(2, 3, 3, 3, 3, 3) = 3.

範例2:

  • 輸入: n = 7,數量 = [15,10,10]
  • 輸出: 5
  • 解釋: 一個最佳方法是:
    • 類型 0 的 15 種產品分配給前三家商店,數量如下:5, 5, 5
    • 10 種類型的產品以以下數量分發到接下來的兩家商店:5, 5
    • 類型 2 的 10 種產品以以下數量分發到最後兩家商店:5, 5
    • 給予任何商店的最大產品數量為 max(5, 5, 5, 5, 5, 5, 5) = 5。

範例 3:

  • 輸入: n = 1,數量 = [100000]
  • 輸出: 100000
  • 解釋:唯一的最佳方法是:
    • 100000個0型產品分送到唯一的商店。
    • 給予任何商店的最大產品數量為 max(100000) = 100000。

約束:

  • m == 數量.長度
  • 1 5
  • 1 5

提示:

  1. 存在單調性,當x小於某個數時,就沒有辦法分配,而當x不小於該數時,總會有辦法分配。
  2. 如果給你一個數字k,其中任何商店提供的產品數量不超過k,你能確定是否所有產品都可以分發嗎?
  3. 實作一個函數 canDistribute(k),如果您可以分發所有產品,則傳回 true,這樣任何商店都不會獲得超過 k 個產品,如果不能,則傳回 false。使用此函數二分查找盡可能小的 k。

解:

我們可以對分配給任何商店的最大可能產品數量 (x) 使用二分搜尋。以下是逐步說明和 PHP 解決方案:

方法

  1. 二分搜尋設定:

    • 將下限(左)設為 1(因為每家店至少可獲得 1 個產品)。
    • 將上限(右)設定為數量數組中的最大數量(在最壞的情況下,一個商店獲得一種類型的所有產品)。
    • 我們的目標是最小化 x 的值(向任何商店提供的最多產品)。
  2. 二分查找邏輯:

    • 對於每個中點 x,檢查是否可以分發所有產品,使得沒有商店擁有超過 x 個產品。
    • 使用輔助函數 canDistribute(x) 來決定可行性。
  3. 可行性檢查(可以分發)

    • 對於每種產品類型的數量,計算分銷該產品類型所需的最小商店數量,每個商店不得超過 x 個產品。
    • 對所有產品類型所需的商店進行求和。
    • 如果所需店舖總數小於或等於n,則可以以x作為每個店舖的最大負載進行分配;否則,這是不可行的。
  4. 二分查找調整:

    • 如果 canDistribute(x) 傳回 true,則表示 x 是可行解,但我們想要最小化 x,因此調整右邊界。
    • 如果回傳 false,則增加左邊界,因為 x 太小。
  5. 結果

    • 二分查找完成後,left 將保存可能的最小 x。

讓我們用 PHP 實作這個解:2064。最小化分配到任何商店的產品數量

<?php /**
 * @param Integer $n
 * @param Integer[] $quantities
 * @return Integer
 */
function minimizedMaximum($n, $quantities) {    
    ...
    ...
    ...
    /**
     * go to ./solution.php
     */
}

/**
 * Helper function to check if we can distribute products with maximum `x` per store
 *
 * @param $x
 * @param $quantities
 * @param $n
 * @return bool
 */
function canDistribute($x, $quantities, $n) {
    ...
    ...
    ...
    /**
     * go to ./solution.php
     */
}

// Test cases
echo minimizedMaximum(6, [11, 6]); // Output: 3
echo minimizedMaximum(7, [15, 10, 10]); // Output: 5
echo minimizedMaximum(1, [100000]); // Output: 100000
?>

解釋:

  1. canDistribute 函數:

    • 對於每個數量,它透過將數量除以 x 來計算所需的最小商店(使用 ceil 向上取整,因為每個商店可以獲得整數個產品)。
    • 累計所需商店超過n則回傳false。
  2. 對 x 進行二分查找:

    • 二分搜尋迭代地減少 x 的範圍,直到收斂於最小可行值。
  3. 效率

    • 此解對於大輸入大小(n 和 m 高達 10^5)非常有效,因為二分搜尋的運行時間為 O(log(max_quantity) * m),這在給定限制內是可行的。

這種方法最大限度地減少了 x,確保產品盡可能均勻地分佈在商店中。

聯絡連結

如果您發現本系列有幫助,請考慮在 GitHub 上給 存儲庫 一個星號或在您最喜歡的社交網絡上分享該帖子? 。您的支持對我來說意義重大!

如果您想要更多類似的有用內容,請隨時關注我:

  • 領英
  • GitHub

以上是最小化分配到任何商店的產品數量的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
如何檢查PHP會話是否已經開始?如何檢查PHP會話是否已經開始?Apr 30, 2025 am 12:20 AM

在PHP中,可以使用session_status()或session_id()來檢查會話是否已啟動。 1)使用session_status()函數,如果返回PHP_SESSION_ACTIVE,則會話已啟動。 2)使用session_id()函數,如果返回非空字符串,則會話已啟動。這兩種方法都能有效地檢查會話狀態,選擇使用哪種方法取決於PHP版本和個人偏好。

描述一個場景,其中使用會話在Web應用程序中至關重要。描述一個場景,其中使用會話在Web應用程序中至關重要。Apr 30, 2025 am 12:16 AM

sessionsarevitalinwebapplications,尤其是在commercePlatform之前。

如何管理PHP中的並發會話訪問?如何管理PHP中的並發會話訪問?Apr 30, 2025 am 12:11 AM

在PHP中管理並發會話訪問可以通過以下方法:1.使用數據庫存儲會話數據,2.採用Redis或Memcached,3.實施會話鎖定策略。這些方法有助於確保數據一致性和提高並發性能。

使用PHP會話的局限性是什麼?使用PHP會話的局限性是什麼?Apr 30, 2025 am 12:04 AM

PHPsessionshaveseverallimitations:1)Storageconstraintscanleadtoperformanceissues;2)Securityvulnerabilitieslikesessionfixationattacksexist;3)Scalabilityischallengingduetoserver-specificstorage;4)Sessionexpirationmanagementcanbeproblematic;5)Datapersis

解釋負載平衡如何影響會話管理以及如何解決。解釋負載平衡如何影響會話管理以及如何解決。Apr 29, 2025 am 12:42 AM

負載均衡會影響會話管理,但可以通過會話複製、會話粘性和集中式會話存儲解決。 1.會話複製在服務器間複製會話數據。 2.會話粘性將用戶請求定向到同一服務器。 3.集中式會話存儲使用獨立服務器如Redis存儲會話數據,確保數據共享。

說明會話鎖定的概念。說明會話鎖定的概念。Apr 29, 2025 am 12:39 AM

Sessionlockingisatechniqueusedtoensureauser'ssessionremainsexclusivetooneuseratatime.Itiscrucialforpreventingdatacorruptionandsecuritybreachesinmulti-userapplications.Sessionlockingisimplementedusingserver-sidelockingmechanisms,suchasReentrantLockinJ

有其他PHP會議的選擇嗎?有其他PHP會議的選擇嗎?Apr 29, 2025 am 12:36 AM

PHP會話的替代方案包括Cookies、Token-basedAuthentication、Database-basedSessions和Redis/Memcached。 1.Cookies通過在客戶端存儲數據來管理會話,簡單但安全性低。 2.Token-basedAuthentication使用令牌驗證用戶,安全性高但需額外邏輯。 3.Database-basedSessions將數據存儲在數據庫中,擴展性好但可能影響性能。 4.Redis/Memcached使用分佈式緩存提高性能和擴展性,但需額外配

在PHP的上下文中定義'會話劫持”一詞。在PHP的上下文中定義'會話劫持”一詞。Apr 29, 2025 am 12:33 AM

Sessionhijacking是指攻擊者通過獲取用戶的sessionID來冒充用戶。防範方法包括:1)使用HTTPS加密通信;2)驗證sessionID的來源;3)使用安全的sessionID生成算法;4)定期更新sessionID。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器