LeetCode--643. 子数组最大平均数 I(C++描述)

// Source : https://leetcode-cn.com/problems/maximum-average-subarray-i/
// Date : 2021-10-13

/******************************************************************************************
给你一个由 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 <= 10^5
-10^4 <= nums[i] <= 10^4

******************************************************************************************/

/*******************************************************************************************************
题目分析:利用滑动窗口,将窗口内的数据进行加和,窗口的大小就是k的大小,如果下一次的和比当前的和大,就更新最大值,
直到遍历结束,得到的最大值返回即可。
********************************************************************************************************/

class Solution {
    
    
public:
    double findMaxAverage(vector<int>& nums, int k) {
    
    
        int n = nums.size();
        // 初始化 sum,c从初值为0开始累加
        int sum = accumulate(nums.begin(), nums.begin() + k, 0);
        int res = sum;
        for (int i = 1; i + k - 1 < n; i++) {
    
    
            // 加上右边新元素,减去左边旧元素
            sum += nums[i + k - 1] - nums[i - 1];
            //将较大值返回
            res = max(res, sum);
        }
        return (double)res / k;
    }
};

// class Solution {
    
    
// public:
//     double findMaxAverage(vector<int>& nums, int k) 
//     {
    
    
//         int max = 0;
//         double sum = 0, ave;
//         if(nums.size() > 1)
//         {
    
    
//             for(int i = 0;i <= nums.size() - k;++i)
//             {
    
    
//                 sum = 0;
//                 for(int j = i;j < k + i;++j)
//                 {
    
    
//                     sum += nums[j];
//                 }
//                 if(sum > max)
//                         max = sum;
//             }
//             ave = sum / k;
//             return ave;
//         }
//         else
//             return nums[0];
//     }
// };

猜你喜欢

转载自blog.csdn.net/qq_44614524/article/details/120752061