刷题找工作!
题目链接
自己的思路
我没思路(哭)。
模拟面试的时候遇到这个题,很熟悉,但是做不出来(哭)。
我用滑动窗口做的,但是我个人觉得很不合理,因为左右滑的条件找不到。
后面看了题解,大致思路猜测是用前缀和与map。
开干。
官方题解
思路是对的,但我做不出。
class Solution {
public int subarraySum(int[] nums, int k) {
int count = 0, pre = 0;
HashMap<Integer, Integer> mp = new HashMap<>();
mp.put(0, 1);//用put放,为什么放(0, 1)
for(int i = 0 ; i < nums.length; i++){
pre += nums[i];
if(mp.containsKey(pre - k)){//哇哦天才,直接看是否有已经存在的前缀和使我们的值为k
count += mp.get(pre - k);//存在, 所以把所有能这样的前缀和都加起来
}
//getOrDefault是如果不存在则创建, 括号里写的是创建的默认数据
mp.put(pre, mp.getOrDefault(pre, 0) + 1);//将这个前缀和放入
}
return count;
}
}
妙啊。
3463

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



