欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 培训 > LeetCode和为k的字数组(560题)

LeetCode和为k的字数组(560题)

2025/5/23 0:41:46 来源:https://blog.csdn.net/Dreamkidya/article/details/146072584  浏览:    关键词:LeetCode和为k的字数组(560题)

题目展示

给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 

子数组是数组中元素的连续非空序列。

示例 1:

输入:nums = [1,1,1], k = 2
输出:2

示例 2:

输入:nums = [1,2,3], k = 3
输出:2

题目地址:560. 和为 K 的子数组 - 力扣(LeetCode)

相关类型题目(进阶):2588. 统计美丽子数组数目 - 力扣(LeetCode)

解题思路

首先我们需要搞懂的一个点: 一组数据的和为10 那么我们的目标和也刚好为10 那么这组数据就是满足题目的子数组.

然后我们在延展一下:一组数据和为20 目标和为15 但是这组数据中前二个元素和为5 即我们这组数据将前二个数据剔除,剩下的即为满足的子数组.

代码演示:

class Solution {public int subarraySum(int[] nums, int k) {int count = 0; // 用来统计和为k的子数组总数int sum = 0; // 前缀和Map<Integer, Integer> map = new HashMap<Integer, Integer>(nums.length + 1); // 用来统计前缀和的集合map.put(0, 1); // key:前缀和 值:出现次数 map.merge(sum,1,Integer::sum); 这行代码会让他变增for (int num : nums) {sum += num; //计算前缀和count += map.getOrDefault(sum - k, 0); 
// 难点:map.getOrDefault(sum - k, DefaultValue) 
//map中getOrDefault方法作用为: 如果有sum-k键返回键值否则返回DefaultValuemap.merge(sum, 1, Integer::sum); 
// map中的merge 存在sum键 在原值基础上+1 否则 sum键值为1}return count;}
}

版权声明:

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

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

热搜词