Subarray Sum K
# https://leetcode.com/problems/subarray-sums-divisible-by-k/
# Given an integer array nums and an integer k, return the number of non-empty subarrays that have a sum divisible by k.
# A subarray is a contiguous part of an array.
# Ex1:
# Input: nums = [4,5,0,-2,-3,1], k = 5
# Output: 7
# Explanation: There are 7 subarrays with a sum divisible by k = 5:
# [4, 5, 0, -2, -3, 1], [5], [5, 0], [5, 0, -2, -3], [0], [0, -2, -3], [-2, -3]
# Ex2:
# Input: nums = [5], k = 9
# Output: 0
# [0, 4, 9, 9, 7, 4, 5]
# hash map keep track of sums count.
# Time: O(n), Space: O(k)
def subarrayDivByK(nums, k):
modMaps = {}
sum = 0
modMaps[0] = 1
res = 0
for i in nums:
sum += i
m = sum % k
if m in modMaps:
res += modMaps[sum%k]
modMaps[m] += 1
else:
modMaps[sum%k] = 1
return res
def main():
# Ex1: 7
nums = [4,5,0,-2,-3,1]
k = 5
print(subarrayDivByK(nums, k))
# Ex2: 0
nums = [5]
k = 9
print(subarrayDivByK(nums, k))
if __name__ == "__main__":
main()```
Last updated