Talentd
FleetCode
Make and follow sheets.Sign in

Make K-Subarray Sums Equal solution and explanation

MediumArrayMathNumber TheorySorting6 min read38.9% acceptanceUpdated 9 Apr 2026
Leetcode Biweekly 101 Make K-subarray sums equal solution | Hindi explanationPawan Kumar Giri · 29:35 · 2K viewsWatch on YouTube
9 more videos on this problem
  1. Leetcode Biweekly 101 Make K-subarray sums equal solution | Hindi explanationPawan Kumar Giri · 29:35 · 2K views
  2. Leetcode Biweekly Contest 101 | 2607. Make K Subarray Sums Equal | SolutionMd Zuhair · 9:25 · 2K views
  3. Make K-Subarray Sums Equal | Biweekly Contest 101codingMohan · 51:30 · 1K views
  4. Leetcode 2607. Make K-Subarray Sums EqualAlgorithms Casts · 21:04 · 1K views
  5. 2607. Make K-Subarray Sums Equal (Leetcode Medium)Programming Live with Larry · 28:32 · 1K views
  6. 【每日一题】LeetCode 2607. Make K-Subarray Sums EqualHuifeng Guan · 15:27 · 421 views
  7. leetcode 2607. Make K-Subarray Sums EqualROBO CAFE · 4:00 · 160 views
  8. leetcode 2607. Make K-Subarray Sums Equal - largest subarray sum, DPCode-Yao · 16:56 · 151 views
  9. 6329. Make K-Subarray Sums Equal || Biweekly Contest 101 || Leetcode Solution || SubscribeCodeCake · 1:01 · 126 views
  10. [LeetCode][Medium] 2607_Make K-Subarray Sums Equal 강의na982 · 8:42 · 22 views

The problem

You are given a 0-indexed integer array arr and an integer k. The array arr is circular. In other words, the first element of the array is the next element of the last element, and the last element of the array is the previous element of the first element.

You can do the following operation any number of times:

  • Pick any element from arr and increase or decrease it by 1.

Return the minimum number of operations such that the sum of each subarray of length k is equal.

A subarray is a contiguous part of the array.

Example 1:

Input: arr = [1,4,1,3], k = 2
Output: 1
Explanation: we can do one operation on index 1 to make its value equal to 3.
The array after the operation is [1,3,1,3]
- Subarray starts at index 0 is [1, 3], and its sum is 4 
- Subarray starts at index 1 is [3, 1], and its sum is 4 
- Subarray starts at index 2 is [1, 3], and its sum is 4 
- Subarray starts at index 3 is [3, 1], and its sum is 4 

Example 2:

Input: arr = [2,5,5,7], k = 3
Output: 5
Explanation: we can do three operations on index 0 to make its value equal to 5 and two operations on index 3 to make its value equal to 5.
The array after the operations is [5,5,5,5]
- Subarray starts at index 0 is [5, 5, 5], and its sum is 15
- Subarray starts at index 1 is [5, 5, 5], and its sum is 15
- Subarray starts at index 2 is [5, 5, 5], and its sum is 15
- Subarray starts at index 3 is [5, 5, 5], and its sum is 15 

Constraints:

  • 1 <= k <= arr.length <= 105
  • 1 <= arr[i] <= 109

Approach overview

Problem Overview: You are given a circular array nums and an integer k. You may increment or decrement any element by 1 per operation. The goal is to make the sum of every length-k subarray equal while minimizing the total number of operations.

Key Insight

If two consecutive k-length subarrays have equal sums, the difference between them must be zero. That difference equals nums[i+k] - nums[i], which forces nums[i] = nums[i+k]. Because the array is circular, repeatedly jumping by k forms cycles. All elements in the same cycle must become equal. The number of independent cycles is determined by gcd(n, k), a classic observation from number theory.

Approach 1: Median Based Optimization (O(n log n) time, O(n) space)

Group indices that belong to the same cycle formed by repeatedly adding k modulo n. For each cycle, collect the corresponding values from the array. All numbers in that group must become the same value. The cost to convert a set of numbers into a single value is minimized when you choose the median. Sort the group using a sorting step, pick the median, and sum the absolute differences between each element and the median. Repeat for every cycle and accumulate the total cost. This works because the median minimizes the sum of absolute deviations, which directly matches the operation cost.

Approach 2: Dynamic Programming Strategy (O(n log n) time, O(n) space)

Another way to reason about the same cycle structure is to treat each cycle as an optimization problem. After extracting the elements of a cycle, sort them and use dynamic programming to compute the minimal cost of transforming all values to a common target among the sorted candidates. Prefix sums help evaluate cost transitions efficiently: the cost of converting elements on the left and right sides of a candidate target can be computed in constant time. While the DP formulation is more explicit about cost transitions, it ultimately reaches the same optimal target value that the median approach identifies.

Recommended for interviews: The median-based cycle solution is the expected approach. Interviewers want to see the observation that equal k-subarray sums force nums[i] = nums[i+k] and that cycles are defined by gcd(n, k). Once you group elements by cycle, applying the median trick shows strong algorithmic intuition and reduces the problem to a clean O(n log n) solution.

Approach 1: Median Based Optimization

Group elements by their indices modulo k to form independent equivalence classes. To equalize each group, transform them to their median value to minimize the number of operations needed.

The idea behind using median is that it minimizes the sum of absolute deviations from a central point.

def make_k_subarray_sums_equal(arr, k):
    from statistics import median
    n = len(arr)
    changes = 0
    for start in range(k):
        values = [arr[i] for i in range(start, n, k)]
        med = median(values)
        changes += sum(abs(val - med) for val in values)
    return int(changes)

# Example usage
print(make_k_subarray_sums_equal([1, 4, 1, 3], 2))  # Output: 1
print(make_k_subarray_sums_equal([2, 5, 5, 7], 3))  # Output: 5
import java.util.*;
public class KSubarraySumsEqual {
    public static int makeKSubarraySumsEqual(int[] arr, int k) {
        int n = arr.length;
        int changes = 0;
        for (int start = 0; start < k; start++) {
            List<Integer> values = new ArrayList<>();
            for (int i = start; i < n; i += k) {
                values.add(arr[i]);
            }
            Collections.sort(values);
            int med = values.get(values.size() / 2);
            for (int val : values) {
                changes += Math.abs(val - med);
            }
        }
        return changes;
    }

    public static void main(String[] args) {
        System.out.println(makeKSubarraySumsEqual(new int[]{1, 4, 1, 3}, 2)); // Output: 1
        System.out.println(makeKSubarraySumsEqual(new int[]{2, 5, 5, 7}, 3)); // Output: 5
    }
}

In this solution, we group the elements by their indices modulo k. For each group, we calculate the median and convert all elements in that group to the median, summing the operations.

Complexity

Time Complexity: O(n log n) due to sorting when computing the median for each group.
Space Complexity: O(n) to store the intermediate groups.

Try this approach in the editor

Approach 2: Dynamic Programming Strategy

This approach uses dynamic programming to maintain a cost structure as we equalize values effectively. By tracking the cost of bringing elements closer together, we manage the transitions efficiently while minimizing operations across different subarrays.

#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>

using namespace std;

int makeKSubarraySumsEqual(vector<int>& arr, int k) {
    int n = arr.size();
    int changes = 0;
    for (int start = 0; start < k; ++start) {
        vector<int> values;
        for (int i = start; i < n; i += k) {
            values.push_back(arr[i]);
        }
        sort(values.begin(), values.end());
        int med = values[values.size() / 2];
        for (int val : values) {
            changes += abs(val - med);
        }
    }
    return changes;
}

int main() {
    vector<int> arr1 = {1, 4, 1, 3};
    cout << makeKSubarraySumsEqual(arr1, 2) << endl; // Output: 1

    vector<int> arr2 = {2, 5, 5, 7};
    cout << makeKSubarraySumsEqual(arr2, 3) << endl; // Output: 5
    
    return 0;
}

This solution uses dynamic programming to implicitly keep track of the costs as we compute the optimal transformation by groups using sorting.

Complexity

Time Complexity: O(n log n) for sorting during value group calculation.
Space Complexity: O(n) for auxiliary storage of elements per group.

Try this approach in the editor

Approach 3: Default Approach

function makeSubKSumEqual(arr: number[], k: number): number {
    const n = arr.length;
    const g = gcd(n, k);
    let ans = 0;
    for (let i = 0; i < g; ++i) {
        const t: number[] = [];
        for (let j = i; j < n; j += g) {
            t.push(arr[j]);
        }
        t.sort((a, b) => a - b);
        const mid = t[t.length >> 1];
        for (const x of t) {
            ans += Math.abs(x - mid);
        }
    }
    return ans;
}

function gcd(a: number, b: number): number {
    if (b === 0) {
        return a;
    }
    return gcd(b, a % b);
}
func makeSubKSumEqual(arr []int, k int) (ans int64) {
	n := len(arr)
	g := gcd(n, k)
	for i := 0; i < g; i++ {
		t := []int{}
		for j := i; j < n; j += g {
			t = append(t, arr[j])
		}
		sort.Ints(t)
		mid := t[len(t)/2]
		for _, x := range t {
			ans += int64(abs(x - mid))
		}
	}
	return
}

func abs(x int) int {
	if x < 0 {
		return -x
	}
	return x
}

func gcd(a, b int) int {
	if b == 0 {
		return a
	}
	return gcd(b, a%b)
}
Try this approach in the editor

Complexity comparison

ApproachComplexity
Median Based Optimization

Time Complexity: O(n log n) due to sorting when computing the median for each group.
Space Complexity: O(n) to store the intermediate groups.

Dynamic Programming Strategy

Time Complexity: O(n log n) for sorting during value group calculation.
Space Complexity: O(n) for auxiliary storage of elements per group.

Default Approach–

Complexity analysis

ApproachTimeSpaceWhen to Use
Median Based OptimizationO(n log n)O(n)General optimal solution using cycle grouping and median minimization
Dynamic Programming StrategyO(n log n)O(n)Useful when explicitly modeling cost transitions with prefix sums

Frequently asked questions

Is Make K-Subarray Sums Equal easy or hard?

The problem is rated Medium on LeetCode. The main difficulty is discovering that equal k-subarray sums force equality along index cycles defined by k. Once that observation is made, the remaining step is a standard median-based minimization.

Make K-Subarray Sums Equal Python/Java solution

Python and Java implementations follow the same steps: compute gcd(n, k), iterate through cycles, collect values, sort them, and compute the cost relative to the median. The logic remains identical across languages with O(n log n) complexity.

How to solve Make K-Subarray Sums Equal in O(n log n)?

First compute g = gcd(n, k). For each of the g cycles formed by repeatedly adding k modulo n, gather the elements. Sort each group, choose the median, and sum absolute differences to that median. Adding costs across all cycles yields the minimal number of operations.

What is the best approach for Make K-Subarray Sums Equal?

The optimal approach groups indices into cycles using gcd(n, k). Elements in the same cycle must become equal because equal k-length subarray sums imply nums[i] = nums[i+k]. For each cycle, convert all values to the median to minimize the sum of absolute differences. This produces an O(n log n) time and O(n) space solution.

Is Make K-Subarray Sums Equal asked at Google/Amazon/Meta?

Problems involving cycle grouping, median minimization, and gcd-based partitioning appear frequently in interviews at companies like Google and Amazon. Variants of this problem test array manipulation, mathematical observations, and optimization using medians.

What data structure is used in Make K-Subarray Sums Equal?

The solution mainly uses arrays or lists to collect elements belonging to the same cycle. Sorting those lists is required to compute the median efficiently. The mathematical component relies on computing gcd(n, k).

What is the time complexity of Make K-Subarray Sums Equal?

The optimal solution runs in O(n log n) time. Each cycle of indices is collected and sorted to compute the median, which dominates the runtime. Space complexity is O(n) for storing cycle elements.

Comments

Now write it yourselfClose this page and solve Make K-Subarray Sums Equal in the editor, without looking.
Practise Make K-Subarray Sums Equal