BackmediumSliding WindowPayPalSwiggy

Minimized Frequency Balance Solution

Problem Statement

Given an array of integers nums of length n and an integer k (1 ≤ k ≤ n), examine every contiguous subarray of length k. For each such subarray, count how many times each distinct value appears. Let maxFreq be the highest of these counts and minFreq be the lowest count among the values that actually occur in the subarray. The balance of the subarray is defined as maxFreq − minFreq. Your task is to determine the smallest balance that can be achieved by any subarray of length k.

Input The first line contains two space‑separated integers n and k. The second line contains n space‑separated integers representing the array nums.

Output Print a single integer: the minimum balance over all subarrays of length k.

Note If a subarray contains only one distinct value, its balance is 0. If all values in a subarray are distinct, the balance is also 0 because every frequency equals 1.

Example 1
Input
5 3 1 2 2 3 3
Output
1

Explanation: The subarrays of length 3 are: 1. [1,2,2] – frequencies: 1→1, 2→2 → balance = 2−1 = 1 2. [2,2,3] – frequencies: 2→2, 3→1 → balance = 1 3. [2,3,3] – frequencies: 2→1, 3→2 → balance = 1 The minimum balance among these is 1.

Example 2
Input
6 4 1 1 2 2 3 3
Output
0

Explanation: Subarrays of length 4: 1. [1,1,2,2] – frequencies: 1→2, 2→2 → balance = 0 2. [1,2,2,3] – frequencies: 1→1, 2→2, 3→1 → balance = 1 3. [2,2,3,3] – frequencies: 2→2, 3→2 → balance = 0 The smallest balance is 0.

Example 3
Input
7 5 1 2 2 2 3 3 3
Output
1

Explanation: Subarrays of length 5: 1. [1,2,2,2,3] – frequencies: 1→1, 2→3, 3→1 → balance = 3−1 = 2 2. [2,2,2,3,3] – frequencies: 2→3, 3→2 → balance = 3−2 = 1 3. [2,2,3,3,3] – frequencies: 2→2, 3→3 → balance = 3−2 = 1 The minimum balance is 1.

Constraints

  • 1 ≤ n ≤ 100000
  • 1 ≤ k ≤ n
  • -10^9 ≤ nums[i] ≤ 10^9
  • The answer is an integer between 0 and k−1 inclusive
Live Compiler1 Free Run Available
Loading Editor...
Test Cases & Output
Click "Run" to test your 1 free compile trial!

🚀 Practice this problem

Run code, get AI hints & track streak

Sign Up Free

Minimized Frequency Balance — Problem Statement & Solution Guide

Sliding WindowMediumFixed Length Window
TimeO(n)
|
SpaceO(m)

Problem Description

Given an array of integers nums of length n and an integer k (1 ≤ k ≤ n), examine every contiguous subarray of length k. For each such subarray, count how many times each distinct value appears. Let maxFreq be the highest of these counts and minFreq be the lowest count among the values that actually occur in the subarray. The *balance* of the subarray is defined as maxFreq − minFreq. Your task is to determine the smallest balance that can be achieved by any subarray of length k.

**Input**

The first line contains two space‑separated integers n and k. The second line contains n space‑separated integers representing the array nums.

**Output**

Print a single integer: the minimum balance over all subarrays of length k.

**Note**

If a subarray contains only one distinct value, its balance is 0. If all values in a subarray are distinct, the balance is also 0 because every frequency equals 1.

DSA Pattern Breakdown

DSA Pattern Breakdown

"Minimized Frequency Balance"

medium

WHY DOES IT MATTER?

Sliding‑window with dynamic frequency tracking is a core pattern for problems that require real‑time statistics over contiguous subarrays, such as finding median, mode, or distinct counts. Mastering it enables efficient solutions where recomputation would be prohibitive.

OPTIMIZATION CHALLENGE

The key insight is that only two elements change when the window slides—one leaves, one enters—so we can update the frequency map and the auxiliary max/min trackers in constant or logarithmic time instead of rebuilding them from scratch.

REAL-WORLD CONNECTION

Think of a network router monitoring packet types over the last k seconds: it must continuously update the most and least common packet types without re‑scanning the entire log each second, mirroring the sliding‑window frequency balance computation.

During an interview, implement the frequency map first, then add a second map from count to frequency count. Use lazy deletion with two heaps (max‑heap for maxFreq, min‑heap for minFreq) to keep the code clean and avoid manual pointer juggling.

COMPLEXITY AT A GLANCE

⏱ Time:O(n)
💾 Space:O(m)

Core Theory — Why This Approach?

The problem asks for the balance of each sliding window of size k, defined as the difference between the most frequent and the least frequent element that actually appears in the window. A naïve solution would recompute the frequency map from scratch for every window, leading to O(n·k) time, which quickly becomes infeasible when n and k approach 10^5. The optimal paradigm leverages the sliding‑window technique combined with a dynamic frequency counter. As the window moves one step to the right, we decrement the count of the element exiting the window and increment the count of the new element, updating auxiliary structures that keep track of the current maximum and minimum frequencies among present values.

Maintaining maxFreq efficiently can be done with a hash map from value to its count and a second map (or a balanced BST / multiset) from count to the number of values that have that count. The highest key in the count‑to‑frequency map gives maxFreq, while the lowest key that has a non‑zero bucket gives minFreq. Updating these structures on each slide is O(log U) where U is the number of distinct frequencies, but because frequencies only change by ±1, we can achieve amortized O(1) using a deque or two heaps with lazy deletion. This reduces the overall complexity to O(n) time and O(m) space, where m is the number of distinct numbers in the current window, which is optimal for the constraints.

Interview Questions on This Problem

Q1How would you modify the solution if the balance definition required the difference between the most frequent element and the *global* least frequent element across the entire array, not just the window?

First compute the global frequency map for the whole array. Then, while sliding the window, maintain the window's maxFreq as before, but minFreq is taken from the pre‑computed global map for any value that appears in the window. This can be done by storing, for each value in the window, its global frequency and taking the minimum among them, updating it in O(1) with a min‑heap keyed by global frequency.

Q2Can you solve the problem in O(n) time without using any ordered data structure like TreeMap or heap?

Yes. Use two arrays (or hash maps) to track the count of each element and the number of elements that have a particular count. Keep two pointers to the current max and min counts; when a count bucket becomes empty, move the pointer inward. Since each count changes by at most one per slide, each pointer moves at most O(k) total, yielding amortized O(1) per slide and overall O(n).

Q3What would be the impact on time and space complexity if the input array could contain values up to 10^9, and you were restricted to O(1) extra space besides the input?

With values up to 10^9 you cannot allocate a direct‑address array for frequencies, so you must rely on a hash map, which still uses O(m) space where m is distinct values in the window. Enforcing O(1) extra space forces you to process the array in multiple passes or use compression techniques, which would increase time to O(n·log k) or higher, breaking the linear‑time guarantee.

Examples

Example 1

Input

5 3
1 2 2 3 3

Output

1

Explanation: The subarrays of length 3 are: 1. [1,2,2] – frequencies: 1→1, 2→2 → balance = 2−1 = 1 2. [2,2,3] – frequencies: 2→2, 3→1 → balance = 1 3. [2,3,3] – frequencies: 2→1, 3→2 → balance = 1 The minimum balance among these is 1.

Example 2

Input

6 4
1 1 2 2 3 3

Output

0

Explanation: Subarrays of length 4: 1. [1,1,2,2] – frequencies: 1→2, 2→2 → balance = 0 2. [1,2,2,3] – frequencies: 1→1, 2→2, 3→1 → balance = 1 3. [2,2,3,3] – frequencies: 2→2, 3→2 → balance = 0 The smallest balance is 0.

Example 3

Input

7 5
1 2 2 2 3 3 3

Output

1

Explanation: Subarrays of length 5: 1. [1,2,2,2,3] – frequencies: 1→1, 2→3, 3→1 → balance = 3−1 = 2 2. [2,2,2,3,3] – frequencies: 2→3, 3→2 → balance = 3−2 = 1 3. [2,2,3,3,3] – frequencies: 2→2, 3→3 → balance = 3−2 = 1 The minimum balance is 1.

Constraints

  • 1 ≤ n ≤ 100000
  • 1 ≤ k ≤ n
  • -10^9 ≤ nums[i] ≤ 10^9
  • The answer is an integer between 0 and k−1 inclusive

Optimal Approach & Strategy

Use a sliding window with a hash map for element counts and a count‑to‑frequency map (or two heaps) to retrieve maxFreq and minFreq in O(1) amortized per slide, achieving O(n) time.

Brute Force Approach

Re‑compute the full frequency map for each window of size k and then scan it to find max and min frequencies, leading to O(n·k) time.

Verified Code Solutions

JavaScript Solution
Time: O(n)
function solution(nums) { return nums.reduce((a, b) => a + b, 0); }

Asked in Top Tech Interviews

PayPalSwiggy

Solve in Interative Editor

Ready to test your code? Open our built-in compiler, run custom test suites, and see detailed complexity analysis reports instantly.