LeetCode 325. 和等于 k 的最长子数组长度

题目描述

325. 和等于 k 的最长子数组长度

image-20250418171419093

思路分析

前缀和

参考代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
func maxSubArrayLen(nums []int, k int) int {
	// 哈希表存储前缀和及其第一次出现的位置
	sumMap := make(map[int]int)
	sumMap[0] = -1 // 处理前缀和等于 k 的情况
	sum := 0
	res := 0

	for i, num := range nums {
		sum += num // 更新前缀和

		// 检查是否存在 sum - k
		if index, exists := sumMap[sum-k]; exists {
			res = max(res, i-index) // 更新结果
		}

		// 只记录第一次出现的前缀和
		if _, exists := sumMap[sum]; !exists {
			sumMap[sum] = i
		}
	}

	return res
}
  • 时间复杂度:O (n),其中 n 是数组的长度。
  • 空间复杂度:O (n),在最坏情况下,哈希表可能存储所有前缀和。

➡️ 点击查看 Java 题解

1
write your code here
本文作者:
本文链接: https://hgnulb.github.io/blog/2025/82000932
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!