华为机试题 :和为 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;
}
相关推荐
三*一1 小时前
优化修整算法
前端·javascript·算法
达子6662 小时前
RUST 图解 第 3 章:通用编程概念(Common Programming Concepts)
开发语言·算法·rust
夏幻灵2 小时前
每日一题:LeetCode 165:比较版本号
算法·leetcode·职场和发展
道尔柯南2 小时前
C++ 面向对象编程入门:类和对象(上)
开发语言·c++·算法
Navigator_Z2 小时前
LeetCode //C - 1288. Remove Covered Intervals
c语言·算法·leetcode
码爸3 小时前
决策树介绍与示例
python·算法·机器学习
动词ing3 小时前
【题目练习】字符串相乘
算法
0+1113 小时前
算法 --链表
数据结构·算法·leetcode·链表
圣保罗的大教堂3 小时前
leetcode 2333. 最小差值平方和 中等
leetcode