643. 子数组最大平均数 I

87 阅读1分钟

题目:
给你一个由 n 个元素组成的整数数组 nums 和一个整数 k 。

请你找出平均数最大且 长度为 k 的连续子数组,并输出该最大平均数。

任何误差小于 10-5 的答案都将被视为正确答案。

算法:

方法一:前缀和
时间复杂度O(2n)

import "math"
func findMaxAverage(nums []int, k int) float64 {
    for i := range nums {
        if i > 0 {
            nums[i] = nums[i - 1] + nums[i]
        }
    }
    ans := float64( math.MinInt64)
    for i := 0; i + k <= len(nums); i ++ {
        avg := float64(0)
        if i == 0 {
            avg = float64(nums[i + k - 1]) / float64(k)
        } else {
            avg = float64(nums[i + k - 1] - nums[i - 1]) / float64(k)
        }
        if avg > ans {
            ans = avg
        }
    }
    return ans
}

方法二:滑动窗口
滑动窗口减少了一次计算前缀的循环,时间复杂度o(n)

import "math"
func findMaxAverage(nums []int, k int) float64 {
    ans := float64(math.MinInt64)
    sum := float64(0) 
    for left, right := 0, 0; right < len(nums); right ++ {
        sum = sum + float64(nums[right])
        if right - left + 1 == k {
            avg := sum / float64(k)
            if avg > ans {
                ans = avg
            }
            sum = sum - float64(nums[left])
            left ++
        }
    }
    return ans
}