mirror of
https://github.com/prdlk/leetcode.git
synced 2026-11-02 13:12:44 +00:00
50 lines
1.3 KiB
Plaintext
50 lines
1.3 KiB
Plaintext
---
|
|
title: '974. Subarray Sums Divisible by K'
|
|
description: Given an integer array nums and an integer k, return the number of non-empty subarrays that have a sum divisible by k
|
|
icon: dot
|
|
topics:
|
|
- { name: "Array", slug: "array" }
|
|
- { name: "Hash Table", slug: "hash-table" }
|
|
- { name: "Prefix Sum", slug: "prefix-sum" }
|
|
issue: "https://github.com/prdlk/leetcode/issues/40"
|
|
sidebar:
|
|
label: 'Subarray Sums Divisible by K'
|
|
badge: 'Medium'
|
|
---
|
|
|
|
### 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`
|
|
|
|
## Solution
|
|
|
|
```py
|
|
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
|
|
```
|