LeetCode 325. 和等于 k 的最长子数组长度
题目描述
思路分析
前缀和
参考代码
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),在最坏情况下,哈希表可能存储所有前缀和。
1
write your code here
CC BY-NC-SA 4.0
许可协议,转载请注明出处!
本博客所有文章除特别声明外,均采用