Leetcode # 2845. Count of Interesting Subarrays
Problem
https://leetcode.com/contest/weekly-contest-361/problems/count-of-interesting-subarrays/
相關例題
Solution: Dynamic Programming
[Time Limit Exceeded 609 / 617 testcases passed]
n := len(nums)
cnt(nums[l:r + 1]) := len([True for num in nums[l:r + 1] if num % modulo == k])
(cnt ≡ count)
result := len([True for i in range(n) for j in range(i, n) if cnt(nums[i, j + 1]) % modulo == k])
Time Complexity: O(n ** 2)
Space Complexity: O(n)
(The input and output generally do not count towards the space complexity.)
class Solution: def countInterestingSubarrays(self, nums: List[int], modulo: int, k: int) -> int: n = len(nums) satisfied = [1 if num % modulo == k else 0 for num in nums] cnt = satisfied.copy() result = len([True for count in cnt if count % modulo == k]) for length in range(2, n + 1): for i in range (n - length + 1): cnt[i] = cnt[i] + satisfied[i + length - 1] if cnt[i] % modulo == k: result += 1 return result
Solution
發生 Memory Limit Exceeded 的關係
(# 604 testcase, modulo = 1000000000)
mod_groups 改使用 Counter()
Time Complexity: O(n)
Space Complexity: O(max(n, modulo))
(The input and output generally do not count towards the space complexity.)
class Solution: def countInterestingSubarrays(self, nums: List[int], modulo: int, k: int) -> int: satisfied = [1 if num % modulo == k else 0 for num in nums] prefix_mod = result = 0 mod_groups = Counter({0: 1}) for s in satisfied: prefix_mod = (prefix_mod + s) % modulo result += mod_groups[(prefix_mod - k) % modulo] mod_groups[prefix_mod] += 1 return result
Last Updated on 2023/09/10 by A1go