523. Continuous Subarray Sum - Explanation

Problem Link

Description

You are given an integer array nums and an integer k, return true if nums has a good subarray or false otherwise.

A good subarray is a subarray where:

  • its length is at least two, and
  • the sum of the elements of the subarray is a multiple of k.

Note:

  • A subarray is a contiguous part of the array.
  • An integer x is a multiple of k if there exists an integer n such that x = n * k. 0 is always a multiple of k.

Example 1:

Input: nums = [23,2,4,6,7], k = 6

Output: true

Explanation: [2,4] is a continuous subarray of size 2 whose sum is 6.

Example 2:

Input: nums = [23,2,6,4,7], k = 6

Output: true

Explanation: [23,2,6,4,7] is an continuous subarray of size 5 whose sum is 42, which is a multiple of 6..

Example 3:

Input: nums = [23,2,6,4,7], k = 13

Output: false

Constraints:

  • 1 <= nums.length <= 1,00,000
  • 0 <= nums[i] <= 1,000,000,000
  • 0 <= sum(nums) <= ((2^31)-1)
  • 1 <= k <= ((2^31)-1)

Company Tags

Please upgrade to NeetCode Pro to view company tags.



1. Brute Force

class Solution:
    def checkSubarraySum(self, nums: List[int], k: int) -> bool:
        for i in range(len(nums) - 1):
            sum = nums[i]
            for j in range(i + 1, len(nums)):
                sum += nums[j]
                if sum % k == 0:
                    return True
        return False

Time & Space Complexity

  • Time complexity: O(n2)O(n ^ 2)
  • Space complexity: O(1)O(1)

2. Prefix SUm + Hash Map

class Solution:
    def checkSubarraySum(self, nums: List[int], k: int) -> bool:
        remainder = {0: -1}  # remainder -> end index
        total = 0

        for i, num in enumerate(nums):
            total += num
            r = total % k
            if r not in remainder:
                remainder[r] = i
            elif i - remainder[r] > 1:
                return True

        return False

Time & Space Complexity

  • Time complexity: O(n)O(n)
  • Space complexity: O(k)O(k)

Where nn is the size of the array numsnums and kk is the number that a subarray sum needs to be multiple of.