# Solving Leetcode Interviews in Seconds with AI: Maximum Subarray Sum With Length Divisible by K


	# Introduction
	In this blog post, we will explore how to solve the LeetCode problem "3381" using AI. LeetCode is a popular platform for preparing for coding interviews, and with the help of AI tools like [Chatmagic](https://www.chatmagic.app), we can generate solutions quickly and efficiently - helping you pass the interviews and get the job offer without having to study for months.

	# Problem Statement
	> You are given an array of integers nums and an integer k. Return the maximum sum of a subarray of nums, such that the size of the subarray is divisible by k.   Example 1:  Input: nums = [1,2], k = 1 Output: 3 Explanation: The subarray [1, 2] with sum 3 has length equal to 2 which is divisible by 1.  Example 2:  Input: nums = [-1,-2,-3,-4,-5], k = 4 Output: -10 Explanation: The maximum sum subarray is [-1, -2, -3, -4] which has length equal to 4 which is divisible by 4.  Example 3:  Input: nums = [-5,1,2,-3,4], k = 2 Output: 4 Explanation: The maximum sum subarray is [1, 2, -3, 4] which has length equal to 4 which is divisible by 2.    Constraints:  1 <= k <= nums.length <= 2 * 105 -109 <= nums[i] <= 109  

	# Explanation
	Here's a solution to find the maximum sum of a subarray with a length divisible by `k`:

*   **Prefix Sum and Modulo:** Calculate prefix sums modulo `k`. This helps in identifying subarrays with lengths divisible by `k`.
*   **Minimum Prefix Sum:** Maintain an array to store the minimum prefix sum encountered for each possible modulo value. This allows us to efficiently find the maximum subarray sum divisible by `k`.
*   **Iterate and Update:** Iterate through the `nums` array, updating the prefix sum and the minimum prefix sum array. Calculate the potential maximum sum using the current prefix sum and the minimum prefix sum encountered so far for the same modulo.

*   **Runtime Complexity:** O(n) & **Storage Complexity:** O(k)

	
	# Code
	```python
	def max_subarray_sum_divisible_by_k(nums: list[int], k: int) -> int:
    """
    Finds the maximum sum of a subarray of nums, such that the size of the subarray is divisible by k.
    """
    prefix_sums = [float('inf')] * k
    prefix_sums[0] = 0
    current_sum = 0
    max_sum = float('-inf')

    for num in nums:
        current_sum += num
        remainder = current_sum % k
        max_sum = max(max_sum, current_sum - prefix_sums[remainder])
        prefix_sums[remainder] = min(prefix_sums[remainder], current_sum)

    return max_sum
	```
			
