zoukankan      html  css  js  c++  java
  • Maximum Average Subarray I

    https://leetcode.com/problems/maximum-average-subarray-i/#/description

    求指定长度为 k 的子数组的最大均值,基本思路是用长度为k 的滑动窗口扫一遍原数组,然后记录最大子数组的MaxSum,最后返回MaxSum/k

    可以优化的部分是滑动窗口内部求sum 的过程。思路是事先求出一个cache 数组,数组里每一项是原数组对应位置的累加和。有了cache 以后滑动窗口在每次滑动过程中,窗口内部的累加就不用重复计算了,可以用窗口末尾和窗口前的cache 值相减得到。

    class Solution {
    public:
        double findMaxAverage(vector<int>& nums, int k) {
        vector<int> cache{0};
        int acc = 0;
        for (int i = 0; i < nums.size(); i++) {
            acc += nums[i];
            cache.push_back(acc);
        }
        
        int start = 0;
        int maxSum = INT_MIN;
        while (start + k - 1 < nums.size()) {
            int sum = cache.at(start + k) - cache.at(start);
            if (sum > maxSum) maxSum = sum;
            start++;
        }
        return ((double)maxSum / (double)k);
    
        }
    };

    这里用一个小trick 来处理窗口从0 开始的时候,因为要减去窗口之前的累加和,所以cache 第一个元素为0,后面的元素错位对齐原数组。

  • 相关阅读:
    Vue 组件之间传值(父子组件传值,vuex传值)
    利用computed和watch实现监听Vuex状态监听
    ESlint+VSCode自动格式化
    MySQL之分组查询(DQL)
    MySQL之排序查询(DQL)
    MySQL之条件查询(DQL)
    MySQL之概述
    jQuery之轮播图
    jQuery之添加删除记录
    jQuery之爱好选择
  • 原文地址:https://www.cnblogs.com/agentgamer/p/7211051.html
Copyright © 2011-2022 走看看