https://leetcode.com/problems/maximum-size-subarray-sum-equals-k/description/
这道题枚举出所有的SUBARRAY的情况,并根据前缀和数组(如果没前缀和数组大法,就是N3),很好想出N2的解。就是N^2种可能里,符合条件的取最大。
follow up O n
我们就需要备忘,因为你知道TAR,你也知道走到当前这个位置的时候,前面的子集和里是否出现过CURSUM-TAR。 所以就是之前出现过的PRESUM 都应该存进MAP。如果遇到冲突的,我们保留最前的,这样可以贪心的保证子集和最长。
public int maxSubArrayLen(int[] ids, int tar) {
int l = ids.length;
int[] pre = new int[l+1];
Map<Integer,Integer> map = new HashMap<>();
int res = 0;
map.put(0, 0);
for(int i = 1; i <= l; i++) {
pre[i] = pre[i-1] + ids[i-1];
int need = pre[i]-tar;
if(map.containsKey(need)){
res = Math.max(res, i-map.get(need));
}
map.putIfAbsent(pre[i], i);
}
return res;
}