Minimum Operations to Make a Uni-Value Grid

Medium
Watch on YouTube ↗

Solution

class Solution {
    public int minOperations(int[][] grid, int x) {
        int m = grid.length, n = grid[0].length;
        int arr[] = new int[m*n];
        int rem = grid[0][0]%x;
        int ind = 0;
        for(int i=0; i<m; i++) {
            for(int j=0; j<n; j++) {
                if(grid[i][j]%x!=rem)
                    return -1;
                arr[ind++] = grid[i][j];
            }
        }

        Arrays.sort(arr); // O(mn*log(m*n))
        // O(m*n)

        int mid = arr.length/2;
        int ans = 0;
        for(int i=0; i<arr.length; i++) {
            ans += (Math.abs(arr[mid]-arr[i]))/x;
        }
        
        return ans;
    }
}