644-Maximum-Average-Subarray-Ii
Sat 17 May 2025
https://leetcode.com/problems/maximum-average-subarray-ii
import pyutil as pyu
pyu.get_local_pyinfo()
print(pyu.ps2("python-dotenv"))
from typing import List
class Solution:
def findMaxAverage(self, nums: List[int], k: int) -> float:
kErr = 1e-5
l = min(nums)
r = max(nums)
# True if there's a subarray with length >= k and average sum >= m
def check(m: float) -> bool:
summ = 0
prevSum = 0
minPrevSum = 0
for i, num in enumerate(nums):
# Trick: -m for each num so that we can check if the sum of the
# Subarray >= 0
summ += num - m
if i >= k:
prevSum += nums[i - k] - m
minPrevSum = min(minPrevSum, prevSum)
# If sum - minPrevSum >= 0,
# We know there's a subarray with length >= k and average sum >= m
if i + 1 >= k and summ >= minPrevSum:
return True
return False
while r - l > kErr:
m = (l + r) / 2
if check(m):
l = m
else:
r = m
return l
new Solution().findMaxAverage()
Score: 5
Category: leetcode