欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

leetcode 325.和等于 k 的最长子数组长度(中等)

程序员文章站 2024-02-17 13:55:52
...

题目描述

给定一个数组 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,且长度最长。

 

解答

class Solution {
public:
    int maxSubArrayLen(vector<int>& nums, int k) {
		int sum = 0;
		int res = 0;
		int lfet = 0;
		map<int,int> m;
		for (int i=0; i<nums.size(); i++) {
			sum += nums[i];
			if (sum == k) {
				res = i+1;
			}

			if (m.find(sum-k) != m.end()) {
				res = max(res, i-m[sum-k]);
			}

			if (m.find(sum) == m.end()) {
				m[sum] = i;
			}
		}

		return res;
    }
};