import java.util.HashMap;
import java.util.Map;
/**
* 930. 和相同的二元子数组
*
* 前缀和
* 哈希表:保存数值相同的前缀和出现的次数
* 注意:前缀和 既可以当做左端点 又可以 当做右端点
* 1 当前位置的前缀和当做右区间端点
* 2 sum - goal 去找到满足条件的左区间端点缺的前缀和
* Map中保存了到此处之前,前缀和为 sum - goal 出现的次数,也就是可以选取的次数
*/
public class Solution930 {
public int numSubarraysWithSum(int[] nums, int goal) {
int sum = 0, ret = 0;
Map<Integer, Integer> cnt = new HashMap<>();
cnt.put(0,1);
for (int num : nums) {
sum += num;
ret += cnt.getOrDefault(sum - goal, 0);
cnt.put(sum, cnt.getOrDefault(sum, 0) + 1);
}
return ret;
}
}
LeetCode -- 930. 和相同的二元子数组
最新推荐文章于 2021-07-19 15:52:46 发布