A. 和为 K 的子数组

    传统题 1000ms 256MiB

和为 K 的子数组

该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。

和为 K 的子数组

题目描述

给定一个整数数组 numsnums 和一个整数 kk,请你统计并返回该数组中和为 kk 的连续非空子数组的个数。

子数组定义为数组中元素的连续非空序列。

输入格式

第一行两个整数 nn 和 kk,分别表示数组的长度和目标和。

第二行 nn 个整数,表示数组 numsnums 的元素。

输出格式

一行一个整数,表示满足条件的子数组的个数。

样例 #1

样例输入 #1

3 2
1 1 1

样例输出 #1

2

样例解释 #1

满足条件的子数组有两个:

  • 第 1 个和第 2 个元素组成的子数组 [1,1][1,1],和为 22
  • 第 2 个和第 3 个元素组成的子数组 [1,1][1,1],和为 22

样例 #2

样例输入 #2

4 3
1 2 3 0

样例输出 #2

3

样例解释 #2

满足条件的子数组有三个:

  • [1,2][1,2],和为 33
  • [3][3],和为 33
  • [3,0][3,0],和为 33

提示

数据范围与约定

  • 对于 100%100\% 的数据,保证:
    • 1≤n≤2×1041 \le n \le 2 \times 10^4
    • −1000≤numsi≤1000-1000 \le nums_i \le 1000
    • −107≤k≤107-10^7 \le k \le 10^7

算法提示

  1. 暴力枚举法:枚举所有子数组的起点和终点,计算和并统计。时间复杂度 O(n2)O(n^2),无法通过全部测试点。
  2. 前缀和 + 哈希表优化(推荐):

【算法解析与逻辑建模进阶】第 4 次随堂测验

未参加
状态
已完成
规则
乐多
题目
3
开始于
2026-5-17 18:00
结束时间
2026-5-17 18:20
持续时间
0.3 小时
主持人
参赛人数
27