Logo

[LeetCode] 2090. K Radius Subarray Averages

[LeetCode] 2090. K Radius Subarray Averages の解答と解説

問題

https://leetcode.com/problems/k-radius-subarray-averages/description/

解答と解説

class Solution:
    def getAverages(self, nums: List[int], k: int) -> List[int]:
        prefixSum = [nums[0]]
        for i in range(1, len(nums)):
            prefixSum.append(prefixSum[-1] + nums[i])
        
        res = [-1 for _ in range(len(nums))]
        for i in range(k, len(nums) - k):
            start, end = i - k, i + k
            total = prefixSum[end] - prefixSum[start - 1] if start >= 1 else prefixSum[end]
            res[i] = total // (2 * k + 1)
            
        return res

numsの要素数をnとした時、

  • Time Complexity: O(n)
  • Space Complexity: O(n)

-1であるかどうか考えるのは面倒なので最初に初期化しておく。

更新されるindexはkからlen(nums)-k-1までの要素であり、平均値はPrefixSumを使うことでO(n)で計算できる。