643. Maximum Average Subarray I
Given an array consisting of n integers, find the contiguous subarray of given length k 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].
我的思路:
看到的第一想法就是滑动窗口的方法,不过简单的 for 和 if 再一次遇见了运行时间过长的问题 T T 。
我的代码(未被接受版,效率太低)
class Solution:
def findMaxAverage(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: float
"""
maxave=sum(nums[0:k])
output=[]
for i in range(len(nums)-k+1):
ave=sum(nums[i:i+k])
if maxave<ave:
maxave=ave
return maxave
(参考代码均使用了依赖库中的函数)
参考代码1:
class Solution:
def findMaxAverage(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: float
"""
#load modules
import numpy as np
#np.cumsum为累计求和函数np.cumsum([1,2,3])=[1,3,6]
sums = np.cumsum([0] + nums)
return int(max(sums[k:] - sums[:-k])) / k
参考代码2:
class Solution:
def findMaxAverage(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: float
"""
#load modules
import itertools
import operator
sum1 = [0] + list(itertools.accumulate(nums))
return max(map(operator.sub, sum1[k:], sum1))/k