2025-11-30 20:53:29 +0300 MSK
Make Sum Divisible by P
Links
Code
class Solution:
def minSubarray(self, nums: List[int], p: int) -> int:
n = len(nums)
total_sum = 0
# Step 1: Calculate total sum and target remainder
for num in nums:
total_sum = (total_sum + num) % p
target = total_sum % p
if target == 0:
return 0 # The array is already divisible by p
# Step 2: Use a dict to track prefix sum mod p
mod_map = {
0: -1
} # To handle the case where the whole prefix is the answer
current_sum = 0
min_len = n
# Step 3: Iterate over the array
for i in range(n):
current_sum = (current_sum + nums[i]) % p
# Calculate what we need to remove
needed = (current_sum - target + p) % p
# If we have seen the needed remainder, we can consider this subarray
if needed in mod_map:
min_len = min(min_len, i - mod_map[needed])
# Store the current remainder and index
mod_map[current_sum] = i
# Step 4: Return result
return -1 if min_len == n else min_len