diff --git a/work/1/Medium/Array/974.subarray-sums-divisible-by-k.py b/work/1/Medium/Array/974.subarray-sums-divisible-by-k.py new file mode 100644 index 0000000..4360cb2 --- /dev/null +++ b/work/1/Medium/Array/974.subarray-sums-divisible-by-k.py @@ -0,0 +1,55 @@ +""" +974. Subarray Sums Divisible by K +Difficulty: Medium +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. + + + +Example 1: + +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] + +Example 2: + +Input: nums = [5], k = 9 +Output: 0 + + + +Constraints: + + • 1 <= nums.length <= 3 * 10^4 + + • -10^4 <= nums[i] <= 10^4 + + • 2 <= k <= 10^4 +""" + + +class Solution: + def subarraysDivByK(self, nums: list[int], k: int) -> int: + remainder_counts = {0: 1} + cur_sum = 0 + count = 0 + + for n in nums: + cur_sum += n + remainder = cur_sum % k + + if remainder in remainder_counts: + count += remainder_counts[remainder] + + remainder_counts[remainder] = remainder_counts.get(remainder, 0) + 1 + + return count