华为机试题 :和为 K 的子数组个数

题目描述

给定一个整数数组 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;
}
相关推荐
dialect_6 小时前
KMP算法
开发语言·c++·算法
reikocao6 小时前
卡尔曼滤波的动态机制:P如何改变融合权重
算法
漂流瓶jz7 小时前
UVA-1612 猜名次 题解答案代码 算法竞赛入门经典第二版
数据结构·算法·题解·排序·aoapc·算法竞赛入门经典
吞下星星的少年·-·8 小时前
Div.2 CF 1130B题(构造,贪心)
算法·贪心·构造
文丑颜不良啊8 小时前
LeetCode1481~1500题目解析
java·leetcode
文丑颜不良啊8 小时前
LeetCode1381~1400题目解析
java·leetcode
是main不是漫9 小时前
【双指针——移动零】数组划分类题目的入门基石
c++·算法
深圳市快瞳科技有限公司10 小时前
野外鸟类AI识别落地实录:输入适配、结构化输出、去重聚合与置信度分流的工程实践
算法·计算机视觉·鸟类识别·鸟类ai识别·野外鸟类观测·林业调查
专注仿真11 小时前
梯度提升类(XFBoost)算法详解与代码实例
开发语言·人工智能·python·算法·大模型训练·控制算法
小豆庄11 小时前
视频遮罩追踪退场后ID撞号的排查—多目标场景下的失效
opencv·算法·bug·视频·python3.11