Maximum Average Subarray II
Description:
Given an array with positive and negative numbers, find the maximum average subarray which length should be greater or equal to given length k.
Example
Given nums = [1, 12, -5, -6, 50, 3], k = 3
Return 15.667 // (-6 + 50 + 3) / 3 = 15.667
Notice
It’s guaranteed that the size of the array is greater or equal to k.
Code:
class Solution:
"""
@param nums: an array with positive and negative numbers
@param k: an integer
@return: the maximum average
"""
def maxAverage(self, nums, k):
# write your code here
if not nums:
return 0
left, right = min(nums), max(nums)
while right-left>0.00001:
mid = (right+left)/2
if self.check(nums, k, mid):
left = mid
else:
right = mid
return left
def check(self, nums, k, mid):
nSum = [0 for i in range(len(nums))]
nSum[0] = nums[0]-mid
for i in range(1, len(nums)):
nSum[i] = nSum[i-1]+nums[i]-mid
minSum = 0
for i in range(k-1, len(nums)):
if nSum[i]-minSum>=0:
return True
minSum = min(minSum, nSum[i-k+1])
return False