给定一个数组 nums 和一个目标值 k,找到和等于 k 的最长连续子数组长度。如果不存在任意一个符合要求的子数组,则返回 0。
示例 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,且长度最长。
提示:
1 <= nums.length <= 2 * 105
-104 <= nums[i] <= 104
-109 <= k <= 109
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/maximum-size-subarray-sum-equals-k
方法一:前缀和+哈希表
C++提交内容:
class Solution {
public:
int maxSubArrayLen(vector<int>& nums, int k) {
unordered_map<long,long> mp;
long sum = 0;
mp[0] = 0;
long r = 0;
for(int i = 0; i != nums.size(); i++){
sum += nums[i];
if(!mp.count(sum)){
mp[sum] = i+1;
}
if(mp.count(sum-k)){
r=max(r,i-mp[sum-k]+1);
}
}
return r;
}
};