概述
- 题目详述
560. 和为K的子数组
给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。
示例 1 :
输入:nums = [1,1,1], k = 2
输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。
说明 :
- 数组的长度为 [1, 20,000]。
- 数组中元素的范围是 [-1000, 1000] ,且整数 k 的范围是 [-1e7, 1e7]。
二.自我探寻
思路:很差的O(n的平方)暴力搜寻(可直接跳至网络学习过程)
代码:public int subarraySum(int[] nums, int k) {
int n=0;
for(int i=0;i<nums.length;i++)
{
int sum=nums[i];
for(int j=i+1;j<=nums.length;j++)
{
if(sum==k)
{
n++;
}
sum=sum+nums[j];
}
if(sum==k)
{
n++;
}
}
return n;
}
评价:
- 网络学习过程
思路:超级棒的思路
可以将滑动窗口的求和问题转化为 两个从第一位开始的区间相减的问题
举个例子-6 5 -1 2 1 -4 4 -1 7 8 k=2
2 1 -4 4 -1 相加等于k
等于-6 5 -1 2 1 -4 4 -1 的和减去-6 5 -1的和
利用map保存相同的和的次数(注意初始化(0,1))
代码:
public int subarraySum(int[] nums, int k) {
Map<Integer, Integer> xMap=new HashMap<Integer,Integer>();
xMap.put(0, 1);
int sum=0;
int n=0;
for(int i=0;i<nums.length;i++)
{
sum=sum+nums[i];
if(xMap.containsKey(sum-k))
{
n=n+xMap.get(sum-k);
}
if(xMap.containsKey(sum))
{
xMap.put(sum, xMap.get(sum)+1);
}
else {
xMap.put(sum, 1);
}
}
return n;
}
评价:
四.Python实现
最后
以上就是舒心书本为你收集整理的560. 和为K的子数组的全部内容,希望文章能够帮你解决560. 和为K的子数组所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复