题目描述
给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数。
注意:
1 <= k <= n <= 30,000。
所给数据范围 [-10,000,10,000]。
示例
输入: [1,12,-5,-6,50,3], k = 4
输出: 12.75
解释: 最大平均数 (12-5-6+50)/4 = 51/4 = 12.75
解答
解答1
class Solution(object):
def findMaxAverage(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: float
"""
max_ave = sum(nums[0:k])*1.0/k
for i in range(0,len(nums)-k+1):
sub_nums = nums[i:i+k]
ave = sum(sub_nums)*1.0/k
if ave > max_ave:
max_ave = ave
return max_ave
sum也需要遍历列表,该方法超出时间限制
解答2
class Solution(object):
def findMaxAverage(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: float
"""
sub_sum = sum(nums[0:k])*1.0
max_ave = sub_sum / k
for i in range(1,len(nums)-k+1):
sub_sum = sub_sum - nums[i-1] + nums[i+k-1]
ave = sub_sum*1.0/k
if ave > max_ave:
max_ave = ave
return max_ave
计算子数组和时利用前一次的计算结果,减去第一个,加上新加的,将原来求和的时间复杂度由O(n)变为O(1)
本文介绍了一种算法问题,即给定一组整数,找出平均数最大且长度固定的连续子数组,并提供了两种解决方案。第一种方法直接计算所有可能的子数组平均数,但因时间复杂度过高而超时。第二种方法通过优化子数组和的计算,显著提高了效率。
759

被折叠的 条评论
为什么被折叠?



