NC125 和为K的连续最大子数组
· 约 1 分钟阅读 · – 次阅读
leetcode
NC125 和为K的连续最大子数组
给定一个无序数组 arr , 其中元素可正、可负、可0。给定一个整数 k ,求 arr 所有连续子数组中累加和为k的最长连续子数组长度。保证至少存在一个合法的连续子数组。 [1,2,3]的连续子数组有[1,2],[2,3],[1,2,3] ,但是[1,3]不是
要求:空间复杂度 O(n), 时间复杂度 O(n)
示例1 输入: [1,-2,1,1,1],0 返回值: 3
示例2 输入: [0,1,2,3],3 返回值: 3
前缀和+哈希表
哈希表记录前缀和第一次出现的位置
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* max length of the subarray sum = k
* @param arr int整型vector the array
* @param k int整型 target
* @return int整型
*/
int maxlenEqualK(vector<int>& arr, int k) {
// write code here
unordered_map<int, int> mp;
mp[0] = -1;
int pre = 0, ans = 0;
for (int i = 0; i < arr.size(); i++) {
pre += arr[i];
if (mp.find(pre-k) != mp.end()) {
ans = max(ans, i-mp[pre-k]);
}
if (mp.find(pre) == mp.end()) {
mp[pre] = i;
}
}
return ans;
}
};