643. Maximum Average Subarray I(easy)
Given an array consisting of
n
integers, find the contiguous subarray of given lengthk
that has the maximum average value. And you need to output the maximum average value.Example 1:
Input: [1,12,-5,-6,50,3], k = 4 Output: 12.75 Explanation: Maximum average is (12-5-6+50)/4 = 51/4 = 12.75
Note:
- 1 <=
k
<=n
<= 30,000.- Elements of the given array will be in the range [-10,000, 10,000].
1 my solution (Time limited)
按题意对每4个求和计算均值并比较大小。超时是在我意料之中的,因为每次求k个和都有k-1个数字和上一轮求和是重叠的
class Solution:
def findMaxAverage(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: float
"""
if len(nums) == k:return sum(nums)/k
avg = -1*1<<31
for i in range(len(nums)-k+1):
avg = max(avg,sum(nums[i:i+k])/k)
return avg
2 先把前i个数的和计算好 (accepted)but slow
class Solution:
def findMaxAverage(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: float
"""
if len(nums) == k:return sum(nums)/k
for i in range(1,len(nums)):
nums[i] += nums[i-1]
maxs = nums[k-1]
for i in range(k,len(nums)):
maxs = max(maxs,nums[i]-nums[i-k])
return maxs/k