十一 560. 和为 K 的子数组

发布时间:2026/5/20 4:18:08

十一 560. 和为 K 的子数组 560. 和为 K 的子数组https://leetcode.cn/problems/subarray-sum-equals-k/给你一个整数数组nums和一个整数k请你统计并返回该数组中和为k的子数组的个数。子数组是数组中元素的连续非空序列。示例 1输入nums [1,1,1], k 2输出2示例 2输入nums [1,2,3], k 3输出2提示1 nums.length 2 * 104-1000 nums[i] 1000-107 k 107class Solution { public int subarraySum(int[] nums, int k) { //1.key前缀和, value该前缀和出现的次数 MapInteger, Integer map new HashMap(); // 2. 关键初始化前缀和为0出现过1次 // 理由如果某个前缀和正好等于k那么 prefixSum - k 0 // 这表示从数组开头到当前位置的子数组满足条件 map.put(0, 1); int preFixSum 0;// 当前前缀和从0开始累加 int result 0;// 满足条件的子数组个数 // 3. 遍历数组逐个处理 for(int num : nums){ // 累加当前元素更新前缀和 preFixSum num; // 4. 核心逻辑找之前有多少个位置的前缀和等于 prefixSum - k // 这些位置作为起点当前位置作为终点子数组和就是k int target preFixSum - k; // 如果不存在返回0存在则返回对应的次数 result map.getOrDefault(target, 0); // 5. 将当前前缀和加入哈希表供后面的位置查询 // 如果已存在次数1否则设为1 map.put(preFixSum, map.getOrDefault(preFixSum, 0) 1); } return result; } }

相关新闻