【LeetCode】子数组的最大平均数Java题解|Java刷题打卡

本文正在参加「Java主题月 – Java 刷题打卡」,详情查看 活动链接

题目描述

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

示例:

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-average-subarray-i
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
复制代码

思路分析

  • 这个题目描述简单易懂,解决也比较容易。可以采用滑动窗口的方法解决。
  • 平均数是滑动窗口类问题中比较简单的,因为只需要判断动态和和窗口中的数字个数,即可求出平均数。在窗口大小不变的情况下,求出最大滑动窗口和即可。

AC代码

/**
 * leetcode 643 子数组的最大平均数
 *
 */
public class DayCode {
    public static void main(String[] args) {
        int[] nums = new int[]{1,12,-5,-6,50,3};
        int k = 4;
        double ans = new DayCode().findMaxAverage(nums, k);
        System.out.println("ans is " + ans);

    }

    public double findMaxAverage(int[] nums, int k) {
        int tempSum = 0, maxSum = 0;
        for (int i = 0; i < k; i++) {
            tempSum += nums[i];
        }
        maxSum = tempSum;
        for (int j = k; j < nums.length; j++) {
            tempSum -= nums[j-k];
            tempSum += nums[j];
            maxSum = Math.max(tempSum, maxSum);
        }
        return (double) maxSum / k;
    }
}
复制代码

提交测试:

image.png

顺利AC!

总结

  • 上述算法的时间复杂度是O(n),空间复杂度是O(1)。
  • 滑动窗口类问题的思想其实并不复杂,但是在代码实现的时候,会有一些边界和细节的问题需要考虑。
  • 滑动窗口的思想,还广泛应用于生产中,比如:API接口限流。
  • 坚持每日一题,加油!
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享