class Solution {
public:
int maxSubArrayLen(vector<int>& nums, int k) {
map<int, int> hash;
int sum = 0;
hash[0] = 0;
int ans = 0;
// 从效率的角度,不应该使用count,应该使用find
for(int len=0; len < nums.size(); len++)
{
sum += nums[len];
auto it = hash.find(sum);
if (it == hash.end())
{
hash[sum] = len+1; // 保持hash[sum] 为较小值,就是保证了hash[sum-k]为较小值
}
it = hash.find(sum - k);
if (it != hash.end())
{
// find len of k = hash[sum] - hash[sum-k] + 1
ans = max(ans, len+1 - hash[sum-k]);
}
}
return ans;
}
};