less than 1 minute read

Problem Statement

leetcode problem link

Brute Force [TLE]

class Solution:
    def countInterestingSubarrays(self, nums: List[int], modulo: int, k: int) -> int:
        res = 0
        N = len(nums)
        arr = []
        for i in range(N):
            arr.append(nums[i] % modulo)

        for i in range(N):
            cnt = 0
            for j in range(i, N):
                if arr[j] == k:
                    cnt += 1
                if cnt % modulo == k:
                    res += 1
        return res

Editorial

Approach: Prefix Sum

class Solution:
    def countInterestingSubarrays(
        self, nums: List[int], modulo: int, k: int
    ) -> int:
        n = len(nums)
        cnt = Counter([0])
        res = 0
        prefix = 0
        for i in range(n):
            prefix += 1 if nums[i] % modulo == k else 0
            res += cnt[(prefix - k + modulo) % modulo]
            cnt[prefix % modulo] += 1
        return res