☰
华为机试题 :和为 K 的子数组个数
2026/10/11 18:30:38 网站建设 项目流程

题目描述

给定一个整数数组nums和一个整数k,请统计并输出该数组中连续子数组和为k的个数。

输入描述

第一行输入一个整数n,表示数组长度。

第二行输入n个整数,表示数组nums。

第三行输入一个整数k。

输出描述

输出和为k的连续子数组个数。

示例 1

输入

text

3 1 1 1 2

输出

text

2

说明

有两个子数组和为 2:[1,1]和[1,1]。

示例 2

输入

text

3 1 2 3 3

输出

text

2

说明

子数组[3]和[1,2]的和都是 3。

C++ 解法

cpp

#include <bits/stdc++.h> using namespace std; int main() { int n; cin >> n; vector<int> nums(n); for (int i = 0; i < n; i++) cin >> nums[i]; int k; cin >> k; unordered_map<int, int> mp; mp[0] = 1; int sum = 0; int ans = 0; for (int x : nums) { sum += x; if (mp.count(sum - k)) { ans += mp[sum - k]; } mp[sum]++; } cout << ans << endl; return 0; }

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询