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. 1 <= k <= n <= 30,000.
2. Elements of the given array will be in the range [-10,000, 10,000].
代码一(1872ms):
class Solution {
public:
double findMaxAverage(vector<int>& nums, int k) {
double m = numeric_limits<double>::lowest();
for (int i = 0; i < nums.size() - k + 1; i++)
{
double t = nums[i];
for (int j = 1; j < k; j++)
{
t += nums[i + j];
}
m = max(m, t / k);
}
return m;
}
};
代码二(186ms):构建新的集合没一项存放之前所有项的和,计算sum[k] - sum[i-k]
的最大值,时间应该是之前方法的1/k
class Solution {
public:
double findMaxAverage(vector<int>& nums, int k) {
vector<int> sum;
sum.push_back(nums[0]);
for (int i = 1; i < nums.size(); i++) {
sum.push_back(nums[i] + sum[i - 1]);
}
double m = sum[k - 1] * 1.0 / k;
for (int i = k; i < nums.size(); i++) {
m = max(m, (sum[i] - sum[i - k]) * 1.0 / k);
}
return m;
}
};
近期评论