网站建设报价方案模板国际十大市场营销公司
给定一个数组 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;}
};