LeetCode 325. 和等于 k 的最长子数组长度
题目描述
给定一个数组 nums 和一个目标值 k,找到和等于 k 的最长连续子数组长度。如果不存在任意一个符合要求的子数组,则返回 0。
示例 1:
输入: nums = [1,-1,5,-2,3], k = 3
输出: 4
解释: 子数组 [1, -1, 5, -2] 和等于 3,且长度最长。
LeetCode 325. 和等于 k 的最长子数组长度
提示:
1 <= nums.length <= 2 * 105
-104 <= nums[i] <= 104
-109 <= k <= 109
一、解题关键词
数组、最大值 连续长度 返回0
二、解题报告
1.思路分析
2.时间复杂度
3.代码示例
class Solution {
public int maxSubArrayLen(int[] nums, int k) {
//滑动窗口
int len = nums.length;
Map<Integer,Integer> preIndexMap = new HashMap<>();
int preSum = 0;
int ans = 0;
preIndexMap.put(0,-1);
for(int i = 0; i< len; i++){
preSum += nums[i];
//确保记录的是第一次出现的位置
if(!preIndexMap.containsKey(preSum)){
preIndexMap.put(preSum,i);
}
//检查是否需要更新答案
if(preIndexMap.containsKey(preSum - k)){
ans = Math.max(ans,i - preIndexMap.get(preSum - k));
}
}
return ans;
}
}
2.知识点
动态规划 前缀和
这是一篇关于LeetCode 325题目的解题报告,主要讨论如何找到数组中和等于k的最长子数组长度。文章涉及动态规划、前缀和等解题关键词,详细分析了解题思路和时间复杂度,并提供了Java代码示例。
613

被折叠的 条评论
为什么被折叠?



