#2111

Minimum Operations to Make the Array K-Increasing

Hard
LeetCode ↗

Approaches

Brute ForceOptimal
Complexity Comparison
Brute ForceOptimal Solution
Time
O(n²)
Unknown
Space
O(1)
Unknown
💡

Intuition

Time UnknownSpace Unknown

We can break the array into k non-overlapping subsequences. For each subsequence, we can calculate the minimum operations needed to make it non-decreasing using a binary search approach to find the longest increasing subsequence (LIS).

⚙️

Algorithm

4 steps
  1. 1Step 1: Create k subsequences by iterating through the array with a step of k.
  2. 2Step 2: For each subsequence, calculate the length of the longest non-decreasing subsequence (LIS).
  3. 3Step 3: The minimum operations for each subsequence is the length of the subsequence minus the length of the LIS.
  4. 4Step 4: Sum the operations for all subsequences and return the total.
solution.py16 lines
1def min_operations(arr, k):
2    from bisect import bisect_right
3    def lis_length(seq):
4        lis = []
5        for x in seq:
6            pos = bisect_right(lis, x)
7            if pos == len(lis):
8                lis.append(x)
9            else:
10                lis[pos] = x
11        return len(lis)
12    operations = 0
13    for start in range(k):
14        subsequence = arr[start::k]
15        operations += len(subsequence) - lis_length(subsequence)
16    return operations

Solutions and explanations are original Tejav content. Problem titles © LeetCode — use the LeetCode button above for the full problem statement.