长度为k子数组中的最大和-LeetCode
2461.长度为k子数组中的最大和
🎯 问题描述(来源于LeetCode)
描述:
给你一个整数数组 nums 和一个整数 k。请你从 nums 中找出满足下述条件的最大子数组和:
- 子数组的长度是
k。 - 子数组中的所有元素各不相同(互不相同)。
如果不存在满足这些条件的子数组,返回 0。
说明:
-
子数组:数组中一段连续非空的元素序列。
-
核心逻辑:长度为
k的子数组中所有元素各不相同,等价于该子数组中不同元素的个数等于k。 -
示例:
-
示例 1:
1 | 输入:nums = [1,2,3,4,5], k = 3 |
- 示例 2:
1 | 输入:nums = [1,2,2,1], k = 3 |
💻 解题思路
思路1:定长滑动窗口 + 哈希表计数
思路1:代码实现
1 | class Solution: |
思路1:📊 性能分析
- 时间复杂度:
- 其中 是数组
nums的长度。代码对数组进行了一次线性遍历,每个元素被加入和移出窗口各一次。哈希表的插入、删除和查询操作在平均情况下可视为 。
- 其中 是数组
- 空间复杂度:
- 哈希表
table最多存储窗口内 个元素的频次信息。
- 哈希表
思考
-
哈希表的作用:
- 代码利用字典
table动态维护窗口内元素的频次。 len(table)实时反映了当前窗口内不同元素的数量。这是判断是否存在重复元素的关键依据。
- 代码利用字典
-
滑动窗口技巧:
- 代码使用
left = i - k + 1来计算窗口的左边界。 - 通过
if left < 0: continue跳过数组起始阶段窗口未填满的情况,这是一种简洁的定长窗口处理方式。
- 代码使用
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 笺札!






