Watch 8 video solutions for Minimum Number of Operations to Satisfy Conditions, a medium level problem involving Array, Dynamic Programming, Matrix. This walkthrough by Aryan Mittal has 5,983 views views. Want to try solving it yourself? Practice on FleetCode or read the detailed text solution.
You are given a 2D matrix grid of size m x n. In one operation, you can change the value of any cell to any non-negative number. You need to perform some operations such that each cell grid[i][j] is:
grid[i][j] == grid[i + 1][j] (if it exists).grid[i][j] != grid[i][j + 1] (if it exists).Return the minimum number of operations needed.
Example 1:
Input: grid = [[1,0,2],[1,0,2]]
Output: 0
Explanation:

All the cells in the matrix already satisfy the properties.
Example 2:
Input: grid = [[1,1,1],[0,0,0]]
Output: 3
Explanation:

The matrix becomes [[1,0,1],[1,0,1]] which satisfies the properties, by doing these 3 operations:
grid[1][0] to 1.grid[0][1] to 0.grid[1][2] to 1.Example 3:
Input: grid = [[1],[2],[3]]
Output: 2
Explanation:

There is a single column. We can change the value to 1 in each cell using 2 operations.
Constraints:
1 <= n, m <= 10000 <= grid[i][j] <= 9Problem Overview: You are given an m x n grid of digits. The goal is to make every column contain the same value in all rows, while ensuring adjacent columns use different values. Each cell change counts as one operation. The task is to minimize the total operations.
Approach 1: Greedy Matrix Adjustment (O(m * n * 10) time, O(1) space)
This approach treats each column independently at first. For every column, count the frequency of digits 0-9. The minimum cost to convert the column to digit d is m - freq[d]. A greedy strategy picks the digit with the smallest cost for the column. If two adjacent columns end up with the same digit, adjust the later column to its second-best option.
The idea relies on column frequency counting and local optimization. While simple, greedy decisions may force suboptimal changes later because adjacent column constraints create dependencies. It works as a heuristic and helps build intuition about column conversion costs.
Approach 2: Row and Column Pattern Matching with Dynamic Programming (O(m * n * 10 + n * 10 * 10) time, O(10) space)
The optimal strategy models the problem column by column using dynamic programming. First compute the cost of converting each column j to digit d. This uses a frequency count from the matrix: cost[j][d] = m - count_of_d_in_column_j.
Define dp[j][d] as the minimum operations needed to fix columns 0..j where column j ends with digit d. Transition by checking all digits from the previous column except d: dp[j][d] = cost[j][d] + min(dp[j-1][prev]) for prev != d. This enforces the rule that adjacent columns must differ.
Because digits range only from 0-9, each column checks at most 10 previous states. The algorithm scans the grid once to compute frequencies and then runs a small DP per column. This combines counting techniques from array processing with column-based state transitions.
Recommended for interviews: The dynamic programming approach is the expected solution. It clearly models the dependency between adjacent columns and runs in near linear time relative to the grid size. A greedy attempt shows understanding of column conversion costs, but the DP solution demonstrates stronger algorithmic reasoning and handles all edge cases correctly.
| Approach | Time | Space | When to Use |
|---|---|---|---|
| Greedy Matrix Adjustment | O(m * n * 10) | O(1) | Quick heuristic when approximating minimal column conversions |
| Row and Column Pattern Matching (Dynamic Programming) | O(m * n * 10 + n * 10 * 10) | O(10) | General optimal solution ensuring adjacent columns differ |