leetcode644. Maximum Average Subarray II

leetcode644. Maximum Average Subarray II

题意:

给定由n个整数组成的数组,找到长度大于或等于k的连续子阵列,其具有最大平均值。您需要输出最大平均值。

思路:

先计算前k个的avg和sum,然后每次往后加一个数,每次加一个数的同时用一个tempsum( = sum)依次减少前置的数,以此来模拟区间向后移动的计算。与直接的暴力相比,少了向后加又前减的一些步骤,减少了许多重复计算,但是这应该不是最优的算法,更快的算法暂时还没想到。

ac代码:

C++

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

python


posted on 2017-07-19 10:50  炮二平五  阅读(832)  评论(0编辑  收藏  举报

导航