643 | Maximum Average Subarray I | 37.70% | 长度等于k的连续元素的最大平均值,动态规划,一个局部最大和l,一个全局最大和g,类似53题 |
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Mon Feb 12 23:46:54 2018
@author: vicky
"""
class Solution:
def findMaxAverage(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: float
"""
##时间超了
# g=sum(nums[0:k])
# l=0
# for i in range(len(nums)-k+1):
# l=sum(nums[i:i+k]) #计算时间长
# g=max(g,l)
# return g/k
#换一种写法,一个一个的挪动
g=sum(nums[0:k]) #global最大值
l=0 #local最大值
for i in range(len(nums)):
if i<k:
l=l+nums[i] #第一个长度为k的数组的和
else:
g=max(l,g)
l=l+nums[i]-nums[i-k] #把长度为k的数组往后挪一个位置
g=max(g,l)
return g/k
nums=[1,2,3,4,5,6]
k=4
print(Solution().findMaxAverage(nums, k))
class Solution:
def findMaxAverage(self, nums, k):
P = [0]
for x in nums: #前0,1,2,...len(nums)个值的和
P.append(P[-1] + x)
ma=0
for i in range(len(nums) - k + 1):
ma = max(ma,P[i+k] - P[i])
return ma / float(k)