地址:
力扣
https://leetcode-cn.com/problems/maximum-average-subarray-i/
题目:
给你一个由 n 个元素组成的整数数组 nums 和一个整数 k 。
请你找出平均数最大且 长度为 k 的连续子数组,并输出该最大平均数。
任何误差小于 10-5 的答案都将被视为正确答案。
示例 1:
| 输入:nums = [1,12,-5,-6,50,3], k = 4 输出:12.75 解释:最大平均数 (12-5-6+50)/4 = 51/4 = 12.75 |
示例 2:
| 输入:nums = [5], k = 1 输出:5.00000 |
提示:
| n == nums.length 1 <= k <= n <= 105 -10^4 <= nums[i] <= 10^4 |
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-average-subarray-i
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:
连续 k 个数的遍历,把 k 个数看作是一体,就像是窗口一样,依次往后挪动
每次挪动记录当前这个窗口的值

首先记录第一组 k 值,然后挪动
新的 k 值等于 旧值 - 老的第一个元素 + 新进的元素
方法一、滑动窗口
#define mymax(a,b) ( (a) > (b) ? (a) : (b) )
double findMaxAverage(int* nums, int numsSize, int k){
int i;
int sum = 0;
double max = 0;
for(i=0; i<k; i++)
sum += nums[i];
max = sum;
for(i=k; i<numsSize; i++)
{
sum = sum - nums[i-k] + nums[i];
max = mymax(max, sum);
}
return max/k;
}

3174

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



