文章目录
- 1. 题目
- 2. 解题
1. 题目
给定一个数组 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,且长度最长。
进阶:
你能使时间复杂度在 O(n) 内完成此题吗?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-size-subarray-sum-equals-k
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
class Solution {
public:
int maxSubArrayLen(vector<int>& nums, int k) {
unordered_map<int,int> m;//前缀和,idx
m[0] = -1;
int i, sum = 0, maxlen = 0;
for(i = 0; i < nums.size(); ++i)
{
sum += nums[i];
if(m.count(sum-k))
maxlen = max(maxlen, i-m[sum-k]);
if(!m.count(sum))
m[sum] = i;
}
return maxlen;
}
};
64 ms 18 MB
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!