Menu
CoddyTech

Subarray Sum Equals K

给你一个整数数组 nums 和一个整数 k。请统计元素之和恰好等于 k 的子数组。子数组是由一个或多个相邻元素组成的一段。即使两个子数组包含相同的值,只要它们的起始位置或结束位置不同,就分别计数。元素的值可以是负数或 0。

函数

subarraySum(nums: integer-array, k: integer) → integer
numsinteger-array
整数数组,其中可以包含负数和零
kinteger
子数组必须达到的总和才能计入
返回值integer
元素之和为 k 的子数组数量

约束条件

  • 1 ≤ nums.length ≤ 2 × 104
  • -1000 ≤ nums[i] ≤ 1000
  • -107 ≤ k ≤ 107
  • 这么长的数组最多有 200,010,000 个子数组,因此答案可以用 32 位有符号整数表示。

示例

输入
nums = [3, 4, -7, 1, 3, 3, 1, -4]k = 7
输出
4
解释
四次运行的结果相加为 7:[3, 4]、[1, 3, 3]、[3, 3, 1] 和 [3, 4, -7, 1, 3, 3]。在最后一个结果中,-7 抵消了 3 和 4。
challenge icon

进阶

你会如何修改答案,使其仍在 O(n) 时间内返回总和为 k 的最长子数组的长度?

重置代码
def subarraySum(nums, k):
    # 在这里编写代码

测试 #1

测试 #2

测试 #3

参数

nums = [3, 4, -7, 1, 3, 3, 1, -4]
k = 7

预期输出

4