前往
大廳
主題

LeetCode - 2528. Maximize the Minimum Powered City 解題心得

Not In My Back Yard | 2023-11-30 12:00:21 | 巴幣 0 | 人氣 74

題目連結:


題目意譯:
你被給定一個索引值從 0 開始且長度為 n 的整數陣列 stations,其中 stations[i] 代表著第 i 座城市裡的發電廠數量。

每一座發電廠可以提供電力給固定範圍中的每一座城市。換句話說,如果範圍為 r,則一座位於城市 i 的發電廠可以提供電力給所有的城市 j 滿足 |i - j| ≦ r 且 0 ≦ i 、 j ≦ n - 1。

注意到 |x| 代表著絕對值。例如說,|7 - 5| = 2 而 |3 - 10| = 7。

一座城市的電力為所有提供它電力的發電廠之電力總量。

政府批准了再多興建 k 座發電廠,每一個可以蓋在任何一座城市裡,而且覆蓋半徑與先前存在的發電廠一致。

給定兩整數 r 和 k,在額外的發電廠以最佳策略建造的情況下,回傳最小電力的城市之電力值最大可以為何。

注意到你可以在多座城市蓋這 k 座發電廠。

限制:
n == stations.length
1 ≦ n ≦ 10 ^ 5
0 ≦ stations[i] ≦ 10 ^ 5
0 ≦ r ≦ n - 1
0 ≦ k ≦ 10 ^ 9



範例測資:
範例 1:
輸入: stations = [1,2,4,5,0], r = 1, k = 2
輸出: 5
解釋:
一個最佳的方式來兩座新的發電廠興建在城市 1 裡。
所以 stations 將變成 [1,4,4,5,0]。
城市 0 從發電廠的供電為 1 + 4 = 5。
城市 1 從發電廠的供電為 1 + 4 + 4 = 9。
城市 2 從發電廠的供電為 4 + 4 + 5 = 13。
城市 3 從發電廠的供電為 5 + 4 = 9。
城市 4 從發電廠的供電為 5 + 0 = 5。
所以最小電力的城市之電力值為 5。
由於它不可獳得到更大的電力值,我們回傳 5。

範例 2:
輸入: stations = [4,4,4,4], r = 0, k = 3
輸出: 4
解釋:
可以證明我們無法讓最小電力的城市之電力值大於 4。


解題思維:
又是一題可以對答案本身進行二分搜尋法(Binary Search)的題目,如這題

而要檢查當前猜的值 M 太大或太小,則可以採取類似這題的方式——也就是當現在看到的城市(假設是由左至右掃過)的電力不足 M 時,則需要興建新的發電廠。而為了可以覆蓋「後面的」城市(因為可以到現在這座城市表示前面已經處理好了),因此這個發電廠要盡量往後面的城市蓋。

如果整個過程加上現在的城市需求已經蓋超過 k 座發電廠。則代表一開始猜的 M 值太大了,要猜小一點;反之,如果全部掃完之後蓋的發電廠 ≦ k 個,則代表我們有機會可以猜得比 M 還大。




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

創作回應

更多創作