和为K的子数组
1.问题描述
给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。
示例 1 :
输入:nums = [1,1,1], k = 2
输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。
2.输入说明
首先输入nums数组的长度n,
然后输入n个整数,以空格分隔。
最后输入整数k。
n的范围为 [1, 20000]。
数组中元素的范围是 [-1000, 1000] ,且整数 k 的范围是 [-1e7, 1e7]。
3.输出说明
输出一个整数
4.范例
输入
3
1 1 1
2
输出
2
5.代码
#include<iostream>
#include<map>
#include<string>
#include<unordered_map>
#include<algorithm>
#include<string.h>//memset函数
using namespace std;
int NumOfSubArray(vector<int> nums, int k)
{
//题目要求:给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数
int res = 0;//记录满足条件的子数组的个数
for (int begin = 0; begin < nums.size(); begin++)
{
int sum = 0;
//每次从新的end位置往前进行累加操作
for (int end = begin; end >= 0; end--)
{
sum += nums[end];
if (sum == k)//满足和为k
res++;
}
}
return res;
}
int main()
{
int n,tmp,k;
cin >> n;
vector<int> nums;
for (int i = 0; i < n; i++)
{
cin >> tmp;
nums.push_back(tmp);
}
cin >> k;
int res = NumOfSubArray(nums,k);
cout << res << endl;
return 0;
}