560. 和为 K 的子数组
刷题找工作!
题目链接
. - 力扣(LeetCode)
自己的思路
我没思路(哭)。
模拟面试的时候遇到这个题,很熟悉,但是做不出来(哭)。
我用滑动窗口做的,但是我个人觉得很不合理,因为左右滑的条件找不到。
后面看了题解,大致思路猜测是用前缀和与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)){//哇哦天才,直接看是否有已经存在的前缀和使我们的值为kcount += mp.get(pre - k);//存在, 所以把所有能这样的前缀和都加起来}//getOrDefault是如果不存在则创建, 括号里写的是创建的默认数据mp.put(pre, mp.getOrDefault(pre, 0) + 1);//将这个前缀和放入}return count;}
}
妙啊。