Menu
CoddyTech

Longest Subarray with Sum K

给定整数 nums 和目标值 k,返回元素之和恰好为 k 的最长子数组的长度。子数组是一段连续的元素,长度至少为 1。某些值可能为 0 或负数。如果没有子数组的元素之和为 k,则返回 0。

函数

longestSubarrayWithSumK(nums: integer-array, k: integer) → integer
numsinteger-array
要搜索的整数,包括负数和零
kinteger
子数组必须具有的确切总和
返回值integer
和为 k 的最长子数组的长度;如果不存在这样的子数组,则为 0

约束条件

  • 1 ≤ nums.length ≤ 2 × 104
  • -104 ≤ nums[i] ≤ 104
  • -109 ≤ k ≤ 109
  • 每个前缀和都保持在 -2 × 108 和 2 × 108 之间,因此 32 位整数就足够了。
  • 如果没有任何子数组的和等于 k,则返回 0。

示例

输入
nums = [2, -1, 3, 1, -4, 2, 3]k = 5
输出
5
解释
三段连续区间的和都是 5:最后一个是 [2, 3],第一个是 [2, -1, 3, 1],还有一个位于索引 2 到 6 的 [3, 1, -4, 2, 3]。最后一个最长,有 5 个元素。
challenge icon

进阶

如果仍允许出现负值,你会如何找到和不超过 k 的最长子数组?

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

测试 #1

测试 #2

测试 #3

参数

nums = [2, -1, 3, 1, -4, 2, 3]
k = 5

预期输出

5