# [643. 子数组最大平均数 I](https://leetcode-cn.com/problems/maximum-average-subarray-i) [English Version](/solution/0600-0699/0643.Maximum%20Average%20Subarray%20I/README_EN.md) ## 题目描述 <!-- 这里写题目描述 --> <p>给定 <code>n</code> 个整数,找出平均数最大且长度为 <code>k</code> 的连续子数组,并输出该最大平均数。</p> <p> </p> <p><strong>示例:</strong></p> <pre> <strong>输入:</strong>[1,12,-5,-6,50,3], k = 4 <strong>输出:</strong>12.75 <strong>解释:</strong>最大平均数 (12-5-6+50)/4 = 51/4 = 12.75 </pre> <p> </p> <p><strong>提示:</strong></p> <ul> <li>1 <= <code>k</code> <= <code>n</code> <= 30,000。</li> <li>所给数据范围 [-10,000,10,000]。</li> </ul> ## 解法 <!-- 这里可写通用的实现逻辑 --> 滑动窗口。 <!-- tabs:start --> ### **Python3** <!-- 这里可写当前语言的特殊实现逻辑 --> ```python class Solution: def findMaxAverage(self, nums: List[int], k: int) -> float: s = sum(nums[:k]) ans = s for i in range(k, len(nums)): s += (nums[i] - nums[i - k]) ans = max(ans, s) return ans / k ``` ### **Java** <!-- 这里可写当前语言的特殊实现逻辑 --> ```java class Solution { public double findMaxAverage(int[] nums, int k) { int s = 0; for (int i = 0; i < k; ++i) { s += nums[i]; } int ans = s; for (int i = k; i < nums.length; ++i) { s += (nums[i] - nums[i - k]); ans = Math.max(ans, s); } return ans * 1.0 / k; } } ``` ### **TypeScript** ```ts function findMaxAverage(nums: number[], k: number): number { let n = nums.length; let ans = 0; let sum = 0; // 前k for (let i = 0; i < k; i++) { sum += nums[i]; } ans = sum; for (let i = k; i < n; i++) { sum += nums[i] - nums[i - k]; ans = Math.max(ans, sum); } return ans / k; } ``` ### **...** ``` ``` <!-- tabs:end -->