您的位置:首页 > 健康 > 养生 > 和等于 k 的最长子数组长度(LeetCode)

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

2024/12/23 10:58:38 来源:https://blog.csdn.net/weixin_74254879/article/details/141231436  浏览:    关键词:和等于 k 的最长子数组长度(LeetCode)

题目

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

解题

"""
时间复杂度: O(n),因为我们只遍历一次数组。
空间复杂度: O(n),用于存储前缀和及其对应的位置。
"""def maxSubArrayLen(nums, k):prefix_sums = {0: -1}  # 初始化哈希表,前缀和为 0 时索引为 -1current_sum = 0max_length = 0for i, num in enumerate(nums):current_sum += num# 检查是否存在前缀和,使得 current_sum - previous_sum = kif 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] = ireturn 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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com