题目链接

class Solution { public double findMaxAverage(int[] nums, int k) { // return findMaxAverage1(nums, k); return findMaxAverage2(nums, k); } // 1.统计和,计算k public double findMaxAverage1(int[] nums, int k) { // 1. 先统计前K项的和 int num = 0; for(int i = 0; i < k; i++) { num += nums[i]; } // 2.计划窗口的移动 int n = num; for(int i = k; i < nums.length; i++) { n = n - nums[i-k] + nums[i]; // 拿取最大值 num = Math.max(n,num); } return 1.0*num / k; // 不乘1.0转化为小数,double类型的话就会有精度不正确的问题 } // 2.双指针 public double findMaxAverage2(int[] nums, int k) { // 1. 先统计前K项的和 int len = nums.length; int num = 0; for(int i = 0; i < k; i++) { num += nums[i]; } int p1 = 0; int p2 = k; int max = num; // 2.计划窗口的移动 while( p2 < len) { max = max - nums[p1++] + nums[p2++]; num = Math.max(num, max); } return 1.0*num / k; // 不乘1.0转化为小数,double类型的话就会有精度不正确的问题 }}