523. Continuous Subarray Sum
LeetCode 523. Continuous Subarray Sum
Description
Given an integer array nums
and an integer k
, return true
ifnums
has a continuous subarray of size at least two whose elements sum up to a multiple of k
, orfalse
otherwise.
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:
Example 2:
Example 3:
Constraints:
1 <= nums.length <= 105
0 <= nums[i] <= 109
0 <= sum(nums[i]) <= 231 - 1
1 <= k <= 231 - 1
Tags
Math, Dynamic Programming
Solution
To solve this problem, we can use prefix-sum strategy to check if each subarray whose elements sum up to a multiple of k
. However, it is an O(n²)
time complexity operation leading to timeout. We observe that if preSum[j] - preSum[i] == n * k
, which means the sum of subarray nums(i,j]
is a multiple of k
, both preSum[i]
and preSum[j]
share the same remainder after mod k
. Therefore, our goal is changed to find nums[i]
and nums[j]
meet the requirements that nums[i] % k == nums[j] % k
and j-i ≥ 2
. Obviously, we can achieve this within O(n)
time complexity by applying a hash table.
Complexity
Time complexity:
Space complexity:
Code
Reference
Last updated
Was this helpful?