当前位置: 首页> 科技> 互联网 > Q570和为k的子数组

Q570和为k的子数组

时间:2025/7/9 16:51:03来源:https://blog.csdn.net/weixin_44554979/article/details/142315550 浏览次数:4次

思路

刚开始以为是滑动窗口双指针,但是发现,有负值,那么,如果窗口内的值大于k,左指针右移不一定是使区间的值减小。就没法了

方法一

双层循环,即判断从i开始,往前计算和为k的数量,每次内层循环必须循环到0,因为可能有多个值(因为有负数)

方法二

前缀和

假设pre[i]表示 a1,a2,a3…ai的和

则pre[i] -pre[j] == k
i到j就是满足条件的子数组。

在这里插入图片描述
还是因为有负数,所以上面三个子串都可能满足条件

代码

public int subarraySum(int[] nums, int k) {Map<Integer, Integer> map = new HashMap<>();int pre = 0;int count = 0;map.put(0,1); //很关键for (int i = 0; i < nums.length; i++) {pre = pre + nums[i];if (map.containsKey(pre - k)){count = count + map.get(pre - k);}map.put(pre, map.getOrDefault(pre,0) + 1);}return count;}```
关键字:Q570和为k的子数组

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: