题目
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.1 <= k <= n <= 30,000.
2.Elements of the given array will be in the range [-10,000, 10,000].
题意
求连续子数组长度为k的最大的平均值。
题解
第一种方法(容易想到C++代码):外循环固定子数组的开头,内循环用来求子数组的平均值。
缺点:双重循环,时间复杂度为O(n*n)
第二种方法(Python代码):用类似用计算机网络中的滑动窗口协议的思想。窗口起初覆盖k个数,窗口每向后移动一个,前面就丢弃一个。
C++代码
class Solution {
public:
double findMaxAverage(vector<int>& nums, int k) {
double temp=0,max_avg=-100000;
if(nums.size()==1){
return nums[0];
}
for(int i=0; i<=nums.size()-k; i++){
for(int j=0; j<k; j++){
temp+=nums[i+j];
}
if(max_avg<temp/k){
max_avg = temp/k;
}
temp = 0;
}
return max_avg;
}
};
python代码
class Solution(object):
def findMaxAverage(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: float
"""
temp=0
max_avg=-100000
if len(nums)==1:
return nums[0]
for i in range(0, len(nums)):
temp = temp + nums[i]
if i==k-1: #前k个数
max_avg = temp
if i>=k:
temp = temp - nums[i-k];
max_avg = max(max_avg, temp)
return float(max_avg)/k