Welcome to Subscribe On Youtube

3381. Maximum Subarray Sum With Length Divisible by K

Description

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

Solutions

Solution 1

  • class Solution {
        public long maxSubarraySum(int[] nums, int k) {
            long[] f = new long[k];
            final long inf = 1L << 62;
            Arrays.fill(f, inf);
            f[k - 1] = 0;
            long s = 0;
            long ans = -inf;
            for (int i = 0; i < nums.length; ++i) {
                s += nums[i];
                ans = Math.max(ans, s - f[i % k]);
                f[i % k] = Math.min(f[i % k], s);
            }
            return ans;
        }
    }
    
    
  • class Solution {
    public:
        long long maxSubarraySum(vector<int>& nums, int k) {
            using ll = long long;
            ll inf = 1e18;
            vector<ll> f(k, inf);
            ll ans = -inf;
            ll s = 0;
            f[k - 1] = 0;
            for (int i = 0; i < nums.size(); ++i) {
                s += nums[i];
                ans = max(ans, s - f[i % k]);
                f[i % k] = min(f[i % k], s);
            }
            return ans;
        }
    };
    
    
  • class Solution:
        def maxSubarraySum(self, nums: List[int], k: int) -> int:
            f = [inf] * k
            ans = -inf
            s = f[-1] = 0
            for i, x in enumerate(nums):
                s += x
                ans = max(ans, s - f[i % k])
                f[i % k] = min(f[i % k], s)
            return ans
    
    
  • func maxSubarraySum(nums []int, k int) int64 {
    	inf := int64(1) << 62
    	f := make([]int64, k)
    	for i := range f {
    		f[i] = inf
    	}
    	f[k-1] = 0
    
    	var s, ans int64
    	ans = -inf
    	for i := 0; i < len(nums); i++ {
    		s += int64(nums[i])
    		ans = max(ans, s-f[i%k])
    		f[i%k] = min(f[i%k], s)
    	}
    
    	return ans
    }
    
    
  • function maxSubarraySum(nums: number[], k: number): number {
        const f: number[] = Array(k).fill(Infinity);
        f[k - 1] = 0;
        let ans = -Infinity;
        let s = 0;
        for (let i = 0; i < nums.length; ++i) {
            s += nums[i];
            ans = Math.max(ans, s - f[i % k]);
            f[i % k] = Math.min(f[i % k], s);
        }
        return ans;
    }
    
    

All Problems

All Solutions