Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 最大平均子阵I,Leetcode。超过时限_Arrays_Max_Average_Sub Array - Fatal编程技术网

Arrays 最大平均子阵I,Leetcode。超过时限

Arrays 最大平均子阵I,Leetcode。超过时限,arrays,max,average,sub-array,Arrays,Max,Average,Sub Array,这个问题来自leetcode。我的输出是正确的,123/123测试用例通过了,但耗时太长。你能帮我改进我的代码吗 问题: 给定一个由n个整数组成的数组,查找具有最大平均值的给定长度k的连续子数组。您需要输出最大平均值 例1: 输入:[1,12,-5,-6,50,3],k=4 产出:12.75 说明:最大平均值为(12-5-6+50)/4=51/4=12.75 class Solution { public double findMaxAverage(int[] nums, int k)

这个问题来自leetcode。我的输出是正确的,123/123测试用例通过了,但耗时太长。你能帮我改进我的代码吗

问题: 给定一个由n个整数组成的数组,查找具有最大平均值的给定长度k的连续子数组。您需要输出最大平均值

例1:

输入:[1,12,-5,-6,50,3],k=4 产出:12.75 说明:最大平均值为(12-5-6+50)/4=51/4=12.75

class Solution {
    public double findMaxAverage(int[] nums, int k) {
     
        
        int i = 0;
        int j = 0;
        double max = Integer.MIN_VALUE;
        while(i+k <= nums.length){ 
             
         double sum = 0;
            while(i < k + j){ 
             sum += nums[i]; 
                i++;
                }    
            max = Math.max(max, sum);
            j++;
            i = j;
        }
        
        return max/k;
    }
}
类解决方案{
公共双findMaxAverage(int[]nums,int k){
int i=0;
int j=0;
double max=整数.MIN_值;
而(i+k
  • 我猜它可能会在
s时被卡在其中一个

  • 我们可以解决问题
    O(N)

  • 公共类解决方案{
    公共静态最终双findMaxAverage(
    最终整数[]nums,
    最终整数k
    ) {
    长电流和=0;
    对于(int-index=0;index
    public class Solution {
        public static final double findMaxAverage(
            final int[] nums,
            final int k
        ) {
            long currSum = 0;
    
            for (int index = 0; index < k; index++) {
                currSum += nums[index];
            }
    
            long maxSum = currSum;
    
            for (int index = k; index < nums.length; index++) {
                currSum += nums[index] - nums[index - k];
                maxSum = Math.max(maxSum, currSum);
            }
    
            return (double) maxSum / k;
    
        }
    }