题目

具体代码
class Solution {
public int subarraySum(int[] nums, int k) {
HashMap<Integer,Integer> map = new HashMap<>();
int preSum = 0;
int count = 0;
map.put(0,1);
for(int num : nums){
preSum += num;
//如果map中包含该前缀和,那么结果就是前缀和的个数,
//比如preSum = 10,k = 5,map中包含preSum-K,个数为5,那么preSum就有5种减去(preSum-k)的方法,所以和为k的个数为5.
if(map.containsKey(preSum-k)){
count += map.get(preSum-k);
}
map.put(preSum,map.getOrDefault(preSum,0)+1);
}
return count;
}
}
本文介绍了一种高效求解子数组和等于特定值K的问题,通过使用前缀和与哈希表,避免了暴力解法的时间复杂度过高的问题。文章详细解释了算法的实现过程,并附带具体代码,帮助读者理解并掌握这一优化算法。
696

被折叠的 条评论
为什么被折叠?



