方法:
前缀和+哈希表统计
思路:
-
前缀和:通过计算从数组起点到当前元素的累积和,将问题转化为查找两个前缀和的差值是否等于目标值 k。
-
哈希表统计:使用哈希表记录每个前缀和出现的次数。在遍历数组过程中,查询当前前缀和减去目标值 k 是否存在于哈希表中,若存在,则增加计数。
代码:
use std::collections::HashMap;
impl Solution {
pub fn subarray_sum(nums: Vec<i32>, k: i32) -> i32 {
let mut prevs:HashMap<i32, i32> = HashMap::new();
prevs.insert(0,1);
let mut sum = 0;
let mut count : i32 = 0;
for num in &nums{
sum += num;
if let Some(&x) = prevs.get(&(sum - k)) {
count += x;
}
*prevs.entry(sum).or_insert(0) += 1;
}
count
}
}