未排序数组中累加和为给定值的最大子数组长度

题目:给定一个无序数组arr, 其中元素可正、可负、可0。给定一个整数k,求arr所有子数组中累加和为k的最长子数组长度

思路:前缀和+哈希map

代码:

 1 /**
 2  * @param {number[]} nums
 3  * @param {number} k
 4  * @return {number}
 5  */
 6 var maxSubArrayLen = function(nums, k) {
 7 let n = nums.length, presum = 0, res = 0, map ={0:-1};
 8 for(let i = 0; i < n; i++){
 9     presum += nums[i];
10     if(map[presum] === undefined) map[presum] = i;
11     if(map[presum - k] !== undefined){
12        res = Math.max(res, i - map[presum - k])
13     }
14 }
15 return res;
16 };

 

posted @ 2021-05-23 13:27  icyyyy  阅读(116)  评论(0)    收藏  举报