Skip to content

Commit b41813a

Browse files
committed
subarrays_div_by_k
1 parent caa4117 commit b41813a

File tree

2 files changed

+42
-1
lines changed

2 files changed

+42
-1
lines changed

src/solution/mod.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@ pub mod two_sum;
44
pub mod shortest_path_binary_matrix;
55
pub mod rearrange_barcodes;
66
pub mod next_larger_nodes;
7-
pub mod num_moves_stones;
7+
pub mod num_moves_stones;
8+
pub mod subarrays_div_by_k;

src/solution/subarrays_div_by_k.rs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
impl Solution {
2+
pub fn subarrays_div_by_k(nums: Vec<i32>, k: i32) -> i32 {
3+
use std::collections::HashMap;
4+
5+
let mut record = HashMap::new();
6+
record.insert(0, 1);
7+
8+
let mut sum = 0;
9+
let mut ans = 0;
10+
for num in nums {
11+
sum += num;
12+
let modulus = (sum % k + k) % k;
13+
14+
let count = record.entry(modulus).or_insert(0);
15+
ans += *count;
16+
*count += 1;
17+
18+
}
19+
return ans;
20+
}
21+
}
22+
23+
struct Solution;
24+
25+
#[cfg(test)]
26+
mod test {
27+
use crate::solution::subarrays_div_by_k::Solution;
28+
29+
#[test]
30+
fn it_work() {
31+
fn t(nums: Vec<i32>, k: i32, pre: i32) {
32+
let ans = Solution::subarrays_div_by_k(nums, k);
33+
assert_eq!(ans, pre);
34+
}
35+
36+
t(vec![4, 5, 0, -2, -3, 1], 5, 7);
37+
t(vec![5], 9, 0);
38+
t(vec![], 0, 0);
39+
}
40+
}

0 commit comments

Comments
 (0)