LeetCode 643. Maximum Average Subarray I

来源:互联网 发布:数据库中的罗马时间 编辑:程序博客网 时间:2024/06/05 20:01

题目:
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 = 4Output: 12.75Explanation: 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].

思路:
先求出最前面k区间的和,如果k和nums的长度相等,直接除以k返回就好了。如果不是,区间后移更新sum_now,此时将sum_max和sum_now比较,再更新sum_max和sum_before。

代码:

class Solution {public:    double findMaxAverage(vector<int>& nums, int k) {        double sum_before=0;//前一个k长度区间最大和        double sum_now=0;//当前k长度区间最大和        double sum_max=0;//所有k长度区间的最大和        int len=nums.size();        for(int i=0;i<k;++i){//先计算前k个值            sum_before+=nums[i];        }        if(len==k){//如果nums的长度和k相等,直接和除以k            return sum_before/k;        }        sum_max=sum_before;//初始化        for(int j=0;j<len-k;++j){            sum_now=sum_before+nums[k+j]-nums[j];//当前k长度区间的最大值为加上K区间的后一个,减去最前面的一个            sum_max=(sum_now>sum_max)?sum_now:sum_max;//更新sum_max            sum_before=sum_now;//更新sum_before        }        return sum_max/k;    }};

输出结果: 172ms

原创粉丝点击