LeetCode 560. Subarray Sum Equals K
LeetCode 560. Subarray Sum Equals K (和为 K 的子数组)
题目
链接
https://leetcode-cn.com/problems/subarray-sum-equals-k/
问题描述
给你一个整数数组 nums 和一个整数 k ,请你统计并返回该数组中和为 k 的连续子数组的个数。
示例
输入:nums = [1,1,1], k = 2
输出:2
提示
1 <= nums.length <= 2 * 104
-1000 <= nums[i] <= 1000
-107 <= k <= 107
思路
与304类似,也是前缀和思路,把每个数的前缀和存起来。同时也要计算前面有没有符合差值为k的区间,考虑到值有正负,这里采用hashmap存放,分别为前缀和值,和该值的数量,遍历结束即可得到答案。
需要注意的有,最开始时要把数对<0,1>加入,用于处理包含开头的数。
复杂度分析
时间复杂度 O(n)
空间复杂度 O(n)
代码
Java
public int subarraySum(int[] nums, int k) {
int ans = 0;
HashMap<Integer, Integer> map = new HashMap<>();
map.put(0,1);
int sum = 0;
for (int i = 0; i < nums.length; i++) {
sum += nums[i];
int need = sum - k;
if (map.containsKey(need)) {
ans += map.get(need);
}
map.put(sum, map.getOrDefault(sum, 0) + 1);
}
return ans;
}
分类:
LeetCode(Java)
标签:
前缀和
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
2020-03-05 剑指 Offer 18. 删除链表的节点
2020-03-05 剑指 Offer 20. 表示数值的字符串
2020-03-05 面试题19. 正则表达式匹配
2020-03-05 剑指 Offer 66. 构建乘积数组
2020-03-05 剑指 Offer 03. 数组中重复的数字
2020-03-05 剑指 Offer 67. 把字符串转换成整数
2020-03-05 剑指 Offer 65. 不用加减乘除做加法