🚩传送门:https://leetcode-cn.com/problems/maximum-average-subarray-i/

题目

给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该 最大平均数

示例:

输入:[1,12,-5,-6,50,3], k = 4 输出:12.75 解释:最大平均数 (12-5-6+50)/4 = 51/4 = 12.75

解题思路:滑动窗口

由于规定了子数组的长度为 k,因此可以通过滑动窗口寻找子数组的最大元素和的方式计算最大平均数
[LeetCode]Ar643. 子数组最大平均数 I - 图1

复杂度分析

时间复杂度:[LeetCode]Ar643. 子数组最大平均数 I - 图2,其中 [LeetCode]Ar643. 子数组最大平均数 I - 图3 是数组 [LeetCode]Ar643. 子数组最大平均数 I - 图4 的长度 。

空间复杂度:[LeetCode]Ar643. 子数组最大平均数 I - 图5

官方代码

  1. class Solution {
  2. public double findMaxAverage(int[] nums, int k) {
  3. int sum = 0;
  4. int n = nums.length;
  5. //1.计算第一个连续子数组
  6. for (int i = 0; i < k; i++) {
  7. sum += nums[i];
  8. }
  9. int maxSum = sum;
  10. //2.依次开始计算
  11. for (int i = k; i < n; i++) {
  12. sum = sum - nums[i - k] + nums[i];
  13. maxSum = Math.max(maxSum, sum);
  14. }
  15. return 1.0 * maxSum / k;
  16. }
  17. }