和等于 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
相关推荐
卷无止境42 分钟前
一人公司的全栈选型指南:让 AI Agent 写得快,也让生意跑得稳
后端·python
爱读书的小胖2 小时前
LeetCode 122:买卖股票的最佳时机 II(C)解题分析
算法
结局无敌2 小时前
React Native for OpenHarmony 实战:三方库 react-native-modal-dialog 的鸿蒙化适配指南
深度学习·算法·react native·react.js·harmonyos
滴啦嘟啦哒2 小时前
【具身笔记】【π0.5 微调与仿真】五、在MuJoCo中实现可视化仿真
笔记·python·vla·具身
OPEN-F3 小时前
ROS2系列教程:上位机建图与导航(原理综合)
算法·机器人
weixin_307779133 小时前
C++代码实现MATLAB中的fitrtree函数功能
开发语言·c++·算法·matlab
全栈练习生3 小时前
AI安全与红队测试
python·ai
tomwang03223 小时前
路径优化建模、优化算法分类及工程化小结
算法·数学建模·分类
小羊没烦恼!3 小时前
Ajax与JSON的一些总结
android·java·前端·数据库·mysql·算法·okhttp
费曼学习法3 小时前
把「发送成功」当「送达」?我排查 IM 长消息被静默吞掉的完整过程
python·ai编程·自动化运维