# 2528. Maximize the Minimum Powered City ###### tags: `Leetcode` `Hard` `Binary Search` `Sliding Window` Link: https://leetcode.com/problems/maximize-the-minimum-powered-city/description/ ## 思路 思路参考[这里](https://leetcode.com/problems/maximize-the-minimum-powered-city/solutions/3014943/python-binary-search-greedy-sliding-window-very-clear-explanation/?orderBy=most_votes) binary search by value找出当有k个额外的station时 最大的minPowerRequired 那么如何判断一个minPowerRequired是不是possible的呢 答案是用sliding window 当发现在位置i station数目小于minPowerRequired时 我们把额外的station 建在i+r是最optimal的解法 ## Code ```python= class Solution: def maxPower(self, stations: List[int], r: int, k: int) -> int: n = len(stations) def isPossible(minPowerRequired, remainStation): windowPower = 0 for i in range(min(r-1, n-1)+1): windowPower += stations[i] additions = [0]*n for i in range(n): if i+r<n: windowPower+=stations[i+r]+additions[i+r] if i-r-1>=0: windowPower-=stations[i-r-1]+additions[i-r-1] if windowPower<minPowerRequired: need = minPowerRequired-windowPower if need>remainStation: return False additions[min(n-1, i+r)] += need windowPower += need remainStation -= need return True left = 0 right = sum(stations)+k+1 while left<right: mid = left+(right-left)//2 if isPossible(mid, k): left = mid+1 else: right = mid return left-1 ```