未排序数组中累加和为给定值的最大子数组长度
题目:给定一个无序数组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 };

浙公网安备 33010602011771号