zoukankan      html  css  js  c++  java
  • LeetCode.643. 子数组最大平均数 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]。
    分析:
    题解一:
    直接暴力求解,每次把 k 个加起来,找出最大和,返回最大和除以 k

    class Solution {
    public double findMaxAverage(int[] nums, int k) {
    int len = nums.length;
    int max = Integer.MIN_VALUE;
    for (int i = 0; i <= len - k; i++) {
    int t = 0;
    for (int j = i; j < i + k; j++)
    t += nums[j];
    max = Integer.max(max, t);
    }
    return max * 1.0 / k;
    }
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    题解二:
    发现其实有些是重复计算了的,比如
    nums[] = [1,2,3,4,5,6,7],k = 3;
    第一次是 1 + 2 + 3
    第二次是 2 + 3 + 4
    第三次是 3 + 4 + 5
    ….
    如果能维护一个数组,每次只加新遇见的数组值和减去末尾的数组值,就把每次 k 次的计算量减少到固定的 2 次

    class Solution {
    public double findMaxAverage(int[] nums, int k) {
    int len = nums.length;
    int max = Integer.MIN_VALUE;
    int sum = 0;
    for (int i = 0; i < k; i++) {
    sum += nums[i];
    max = sum;
    }
    for (int i = k; i < len; i++) {
    sum += nums[i] - nums[i - k];
    max = Integer.max(sum, max);
    }
    return max * 1.0 / k;
    }
    }
    ---------------------

  • 相关阅读:
    在 docker 容器中捕获信号
    python入门二维码生成
    SSH 端口转发
    Python之模块与包
    滑块验证demo示例
    上下界网络流初探
    大整数模板
    计算几何模板
    关于差分约束系统的脑洞
    并查集,以及可拆分并查集
  • 原文地址:https://www.cnblogs.com/hyhy904/p/11257585.html
Copyright © 2011-2022 走看看