643.子数组最大平均数ⅠJava
题目描述
给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数。
输入输出样式
示例1:
输入:[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/
思路
使用滑动窗口,遍历一遍数组。一边遍历一边更新连续子数组的和的最大值。
算法分析
时间复杂度O(n),空间复杂度为O(1)
求解函数
public double findMaxAverage(int[] nums, int k) {
int rst;
int sum = 0;
for (int m = 0; m < k; ++m) sum += nums[m];
rst = sum;
for (int i = 1; i <= nums.length - k; ++i) {
sum = sum - nums[i - 1] + nums[i + k - 1]; //每滑动一个元素,sum去掉头部划出的元素,加入尾部划入的元素
if (sum > rst) rst = sum;//更新最大值
}
return (double) (rst) / k;//最后再转double耗时低于一开始就将rst定义为double
}
主函数调用
class Solution643 {
public static void main(String[] args) {
Solution643 sol = new Solution643();
int[] nums = new int[]{1, 12, -5, -6, 50, 3};
System.out.printf("%.2f", sol.findMaxAverage(nums, 4));
}
public double findMaxAverage(int[] nums, int k) {...}
}