力扣练习——和为K的子数组

和为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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值