前往
大廳
主題

LeetCode - 2064. Minimized Maximum of Products Distributed to Any Store 解題心得

Not In My Back Yard | 2022-04-30 00:00:04 | 巴幣 0 | 人氣 168

題目連結:


題目意譯:
你被給定一整數 n 其代表著現有 n 間特產零售店。現在有 m 個各自數量不一的產品種類,其以一個索引值從 0 開始的整數陣列 quantities 所給定,其中 quantities[i] 代表著第 i 個產品種類之數量。

你需要根據以下規則將所有產品分配到各個零售店:
一間店只可以被給定最多一種產品,但是數量可以任意。
分配之後,每間店將有若干給定的產品數(可能是 0)。令分配至任意店中的產品數量之最大值為 x。你的目標是想要讓 x 越小越好,即最小化分配至任意店中的產品數量。

回傳最小可能的 x 之值。

限制:
m == quantities.length
1 ≦ m ≦ n ≦ 10 ^ 5
1 ≦ quantities[i] ≦ 10 ^ 5



範例測資:
範例 1:
輸入: n = 6, quantities = [11,6]
輸出: 3
解釋: 一個最佳的方式為:
- 種類 0 的 11 個產品根據其右之數量分配到前四間店:2, 3, 3, 3
- 種類 1 的 6 個產品根據其右之數量分配到另外兩間店:3, 3
分配至任意店中的產品數量之最大值為 max(2, 3, 3, 3, 3, 3) = 3。

範例 2:
輸入: n = 7, quantities = [15,10,10]
輸出: 5
解釋: 一個最佳的方式為:One optimal way is:
- 種類 0 的 15 個產品根據其右之數量分配到前三間店:5, 5, 5
- 種類 1 的 10 個產品根據其右之數量分配到接著的兩間店:5, 5
- 種類 2 的 10 個產品根據其右之數量分配到最後的兩間店:5, 5
分配至任意店中的產品數量之最大值為 max(5, 5, 5, 5, 5, 5, 5) = 5。

範例 3:
輸入: n = 1, quantities = [100000]
輸出: 100000
解釋: 唯一一個最佳的方式為:
- 種類 0 的 100000 個產品全數分配到唯一的一間店。
分配至任意店中的產品數量之最大值為 max(100000) = 100000。


解題思維:
這題的精神一樣——對「答案」本身(在本題中即為 x 之值)進行二分搜尋法(Binary Search)。

那要怎麼判斷一個「答案」可不可行呢?由於我們需要將所有產品都分配出去,因此可以看到我們只需掃過所有產品,然後計算出單一種類的產品最少需要幾間店並將所有產品種類所需加總,看有無超過總店數 n 即可。

例如範例測資中(已知真正的答案為 x = 5,所以這邊試別的值),若 x = 4 時,則
種類 0 需要 15 / 4 = 3 餘 3,所以需要 4 間店、
種類 1 需要 10 / 4 = 2 餘 2,所以需要 3 間店、
種類 2 需要 10 / 4 = 2 餘 2,所以需要 3 間店。
總計為 4 + 3 + 3 = 10 間店,而這超過了 n = 7 間店。所以 x 不可能為 4。

而當 x = 6 時,則
種類 0 需要 15 / 6 = 2 餘 3,所以需要 3 間店、
種類 1 需要 10 / 6 = 1 餘 4,所以需要 2 間店、
種類 2 需要 10 / 6 = 1 餘 4,所以需要 2 間店。
總計為 3 + 2 + 2 = 7 間店,而這小於或等於 n = 7 間店。所以 x 可以為 6。
以此類推。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作