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]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-average-subarray-i
//2020年11月8日21:14:08
public double findMaxAverage(int[] nums, int k) {
int max = Integer.MIN_VALUE;
int posNum = 0;
for (int i = 0; i < nums.length - (k - 1); i++) {
for (int j = i; j < k + i; j++){
posNum += nums[j];
}
if (posNum > max){
max = posNum;
}
posNum = 0;
}
return (double) max / k;
}
//累计求和 先把每一个连续子集和的和用数组arr保存下来
// 然后用相隔k的arr[i+k] - arr[i] 里面找最大的就够了
public double findMaxAverage(int[] nums, int k) {
int[] arr = new int[nums.length];
arr[0] = nums[0];
for (int i = 1; i < nums.length; i++) {
arr[i] = arr[i - 1] + nums[i];
}
double max = arr[k - 1];
for (int i = 0; i < arr.length - k; i++) {
max = Math.max(max, (arr[i + k] - arr[i]));
}
return (max / 4);
}
public static void main(String[] args) {
double a = new _643().findMaxAverage(new int[]{1,12,-5,-6,50,3},4);
System.out.println(a);
}