leetcode 325.和等于 k 的最长子数组长度(中等)
程序员文章站
2024-02-17 13:55:52
...
题目描述
给定一个数组 nums 和一个目标值 k,找到和等于 k 的最长子数组长度。如果不存在任意一个符合要求的子数组,则返回 0。
注意:
nums 数组的总和是一定在 32 位有符号整数范围之内的。
示例 1:
输入: nums = [1, -1, 5, -2, 3], k = 3
输出: 4
解释: 子数组 [1, -1, 5, -2] 和等于 3,且长度最长。
示例 2:
输入: nums = [-2, -1, 2, 1], k = 1
输出: 2
解释: 子数组 [-1, 2] 和等于 1,且长度最长。
解答
class Solution {
public:
int maxSubArrayLen(vector<int>& nums, int k) {
int sum = 0;
int res = 0;
int lfet = 0;
map<int,int> m;
for (int i=0; i<nums.size(); i++) {
sum += nums[i];
if (sum == k) {
res = i+1;
}
if (m.find(sum-k) != m.end()) {
res = max(res, i-m[sum-k]);
}
if (m.find(sum) == m.end()) {
m[sum] = i;
}
}
return res;
}
};