523. Continuous Subarray Sum

  • edge case: modSeen[0] = -1
class Solution {
public:
    bool checkSubarraySum(vector<int>& nums, int k)
    {
        int n = nums.size();
        int prefixMod = 0;
        unordered_map<int, int> modSeen;

        modSeen[0] = -1;

        for (int i = 0; i < n; ++i)
        {
            prefixMod = (prefixMod + nums[i]) % k;
            if (modSeen.count(prefixMod))
            {
                if (i - modSeen[prefixMod] > 1)
                {
                    return true;
                }
            }
            else
            {
                modSeen[prefixMod] = i;
            }
        }
        return false;
    }
};```

- T: $O(N)$
- S: $O(N)$