1. 程式人生 > 其它 >leetcode 643. Maximum Average Subarray I 子陣列最大平均數 I

leetcode 643. Maximum Average Subarray I 子陣列最大平均數 I

一、題目大意

https://leetcode.cn/problems/maximum-average-subarray-i/

給你一個由 n 個元素組成的整數陣列 nums 和一個整數 k 。
請你找出平均數最大且 長度為 k 的連續子陣列,並輸出該最大平均數。
任何誤差小於10^(-5)的答案都將被視為正確答案。
示例 1:

輸入:nums = [1,12,-5,-6,50,3], k = 4
輸出:12.75
解釋:最大平均數 (12-5-6+50)/4 = 51/4 = 12.75

示例 2:

輸入:nums = [5], k = 1
輸出:5.00000

提示:

  • n == nums.length
  • 1 <= k <= n <= 105
  • -104 <= nums[i] <= 104

二、解題思路

滑動視窗的思路解決,視窗長度固定一直向右滑動即可

三、解題方法

3.1 Java實現

public class Solution {
    public double findMaxAverage(int[] nums, int k) {
        // 初始化視窗
        double total = 0;
        for (int i = 0; i < k; i++) {
            total += nums[i];
        }
        double maxAvg = total / k;
        // 向右移
        for (int right = k; right < nums.length; right++) {
            total = total + nums[right] - nums[right - k];
            double tmpAvg = total / k;
            if (tmpAvg >= maxAvg) {
                maxAvg = tmpAvg;
            }
        }
        return maxAvg;
    }
}

四、總結小記

  • 2022/5/17 瞭解了滑動視窗的思想,解決這道題就很簡單了