和等于 k 的最长子数组长度(LeetCode)

题目

给定一个数组 nums 和一个目标值 k,找到和等于*k* 的最长连续子数组长度。如果不存在任意一个符合要求的子数组,则返回 0

解题

python 复制代码
"""
时间复杂度: O(n),因为我们只遍历一次数组。
空间复杂度: O(n),用于存储前缀和及其对应的位置。
"""


def maxSubArrayLen(nums, k):
    prefix_sums = {0: -1}  # 初始化哈希表,前缀和为 0 时索引为 -1
    current_sum = 0
    max_length = 0

    for i, num in enumerate(nums):
        current_sum += num

        # 检查是否存在前缀和,使得 current_sum - previous_sum = k
        if current_sum - k in prefix_sums:
            max_length = max(max_length, i - prefix_sums[current_sum - k])

        # 仅在哈希表中记录前缀和首次出现的位置
        if current_sum not in prefix_sums:
            prefix_sums[current_sum] = i

    return max_length


# 示例 1
nums = [1, -1, 5, -2, 3]
k = 3
print(maxSubArrayLen(nums, k))  # 输出: 4

# 示例 2
nums = [-2, -1, 2, 1]
k = 1
print(maxSubArrayLen(nums, k))  # 输出: 2
相关推荐
chushiyunen1 分钟前
python双下划线魔术方法(特殊方法)(双下划线方法)
python
米码收割机4 分钟前
【AI】OpenClaw问题排查
开发语言·数据库·c++·python
所谓伊人,在水一方3335 分钟前
【Python数据科学实战之路】第10章 | 机器学习基础:从理论到实践的完整入门
开发语言·人工智能·python·机器学习·matplotlib
王夏奇5 分钟前
Python-对excel文件操作-pandas库
python·excel·pandas
无风听海6 分钟前
Python之TypeVar深入解析
开发语言·python·typevar
篮l球场6 分钟前
合并 K 个升序链表
算法
苦藤新鸡7 分钟前
87.分割成两个等和数组 leetcode416
数据结构·算法·leetcode
独断万古他化7 分钟前
Python 接口测试之 requests 库核心用法
python·pytest·接口测试·requests
炽烈小老头9 分钟前
【 每天学习一点算法 2026/03/11】从前序与中序遍历序列构造二叉树
学习·算法
进击切图仔9 分钟前
ROS 行为(Action)机制
算法