class Solution:
def maxSubArrayLen(self, A: List[int], k: int) -> int:
""" tc O(N) sc O(N)
main idea: use a cache to record a kv pair where key is psum and value is first occurance index + Two sum
"""
d = {0: -1}
maxLen = psum = 0
for idx, a in enumerate(A):
psum += a
if psum -k in d:
maxLen = max(maxLen, idx - d.get(psum -k, idx)
if psum not in d:
d[psum] = idx
return maxLen