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