Minimum Absolute Difference in Sliding Submatrix

Medium
Watch on YouTube ↗

Solution

class Solution {
    public int[][] minAbsDiff(int[][] grid, int k) {
        int m = grid.length, n = grid[0].length;
        int ans[][] = new int[m-k+1][n-k+1];

        // (m-k)(n-k)*(k*k + k*k*logk)

        for(int i=0; i<m-k+1; i++) {
            for(int j=0; j<n-k+1; j++) {

                TreeSet<Integer> tset = new TreeSet<>();
                for(int r=i; r<i+k; r++) {
                    for(int c=j; c<j+k; c++) {
                        tset.add(grid[r][c]);
                    }
                }

                int min = Integer.MAX_VALUE;
                // 1 2 3 4 5
                int prev = tset.first();
                for(int val : tset) {
                    if(val!=prev) {
                        min = Math.min(min, val-prev);
                        prev = val;
                    }
                }

                ans[i][j] = min==Integer.MAX_VALUE ? 0 : min;
            }
        }

        return ans;
    }
}