LeetCode之子数组最大平均数 I(六百四十三)

目录

 

题目

解题

方法一、滑动窗口


题目

(原题链接:https://leetcode-cn.com/problems/maximum-average-subarray-i/)

给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数。

示例 1:

输入: [1,12,-5,-6,50,3], k = 4
输出: 12.75
解释: 最大平均数 (12-5-6+50)/4 = 51/4 = 12.75

注意:

1 <= k <= n <= 30,000。
所给数据范围 [-10,000,10,000]。

解题

方法一、滑动窗口

分析:该题可以使用滑动窗口来解,首先求得初始窗口之和,然后根据当前滑动窗口之和等于上一个窗口之和减去上一个窗口的第一个数,再加上当前窗口的最后一个数的关系等式进行比较,进而求得最大和,最后再取平均值。直接看代码吧。

代码:(C++)

class Solution {
public:
    double findMaxAverage(vector& nums, int k) {
        double sum = 0;
        for (int i = 0; i < k; i++)
            sum += nums[i];

        double ma = sum;
        for (int i = k; i < nums.size(); i++) {
            sum = sum - nums[i - k] + nums[i];
            ma = max(ma, sum);
        }

        return ma / k;
    }
};

时间复杂度:O(n)。

空间复杂度:O(1)。

执行结果:

LeetCode之子数组最大平均数 I(六百四十三)_第1张图片

 

如果有疑问,欢迎评论留言或者私信沟通! 

你可能感兴趣的:(LeetCode,c++,动态规划,算法,leetcode)