LeetCode 643. Maximum Average Subarray I (最大平均值子数组之一)

Posted 几米空间

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 643. Maximum Average Subarray I (最大平均值子数组之一)相关的知识,希望对你有一定的参考价值。

Given an array consisting of n integers, find the contiguous subarray of given length k that has the maximum average value. And you need to output the maximum average value.

Example 1:

Input: [1,12,-5,-6,50,3], k = 4
Output: 12.75
Explanation: Maximum average is (12-5-6+50)/4 = 51/4 = 12.75

 

Note:

  1. 1 <= k <= n <= 30,000.
  2. Elements of the given array will be in the range [-10,000, 10,000].

 


题目标签:Array

  题目给了我们一个nums array 和一个 k,让我们找到长度为k 的子数组,它的平均值是最大的。

  这题比较容易想到的方法就是 sliding window, 想象一下有一个长度为k 的窗口在移动,每次加上一个新的num,还要减去一个旧的num。维护更新一个最大的sum。(这里不需要在每一次维护更新的时候 / k,最后 /k 就可以了)  

  最后用最大的sum / k 。

  

  在做这一题的过程中,我发现 Double.MIN_VALUE 居然是大于0的数字。之前用的 Integer.MIN_VALUE 明明是最小的负数。

  来看一下Double.MIN_VALUE 的定义:A constant holding the smallest positive nonzero value of type double, 2-1074.

 

 

Java Solution:

Runtime beats 51.30% 

完成日期:10/19/2017

关键词:Array

关键点:Sliding Window

 1 class Solution 
 2 {
 3     public double findMaxAverage(int[] nums, int k) 
 4     {
 5         double mav = -Double.MAX_VALUE;
 6         double tempMav = 0;
 7         
 8         for(int i=0; i<nums.length; i++)
 9         {
10             tempMav += nums[i];
11             
12             if(i + 1 >= k)
13             {   
14                 mav = Math.max(mav, tempMav);
15                 tempMav -= nums[i + 1 - k];
16             }
17              
18         }
19         
20        
21         return mav / k;
22     }
23 }

参考资料:N/A

 

LeetCode 题目列表 - LeetCode Questions List

 

以上是关于LeetCode 643. Maximum Average Subarray I (最大平均值子数组之一)的主要内容,如果未能解决你的问题,请参考以下文章

643. Maximum Average Subarray I

LeetCode算法题-Maximum Average Subarray I(Java实现)

643. Maximum Average Subarray I

643. Maximum Average Subarray I

643. Maximum Average Subarray I

643. Maximum Average Subarray I 最大子阵列平均数