1765. Map of Highest Peak

Difficulty:
Related Topics:
Similar Questions:

    Problem

    You are given an integer matrix isWater of size m x n that represents a map of land and water cells.

    You must assign each cell a height in a way that follows these rules:

    Find an assignment of heights such that the maximum height in the matrix is maximized.

    Return **an integer matrix *height* of size m x n where height[i][j] is cell (i, j)'s height. If there are multiple solutions, return any of them**.

      Example 1:

    Input: isWater = [[0,1],[0,0]]
    Output: [[1,0],[2,1]]
    Explanation: The image shows the assigned heights of each cell.
    The blue cell is the water cell, and the green cells are the land cells.
    

    Example 2:

    Input: isWater = [[0,0,1],[1,0,0],[0,0,0]]
    Output: [[1,1,0],[0,1,1],[1,2,2]]
    Explanation: A height of 2 is the maximum possible height of any assignment.
    Any height assignment that has a maximum height of 2 while still meeting the rules will also be accepted.
    

      Constraints:

    Solution (Java)

    class Solution {
        private final int[] dir = {0, 1, 0, -1, 0};
    
        public int[][] highestPeak(int[][] isWater) {
            int h = 1;
            Queue<int[]> q = new LinkedList<>();
            for (int i = 0; i < isWater.length; i++) {
                for (int j = 0; j < isWater[0].length; j++) {
                    isWater[i][j] = isWater[i][j] == 1 ? 0 : -1;
                    if (isWater[i][j] == 0) {
                        q.add(new int[] {i, j});
                    }
                }
            }
            while (!q.isEmpty()) {
                Queue<int[]> q1 = new LinkedList<>();
                for (int[] cur : q) {
                    int x = cur[0];
                    int y = cur[1];
                    for (int i = 0; i < 4; i++) {
                        int nx = x + dir[i];
                        int ny = y + dir[i + 1];
                        if (nx >= 0
                                && nx < isWater.length
                                && ny >= 0
                                && ny < isWater[0].length
                                && isWater[nx][ny] == -1) {
                            isWater[nx][ny] = h;
                            q1.add(new int[] {nx, ny});
                        }
                    }
                }
                h++;
                q = q1;
            }
            return isWater;
        }
    }
    

    Explain:

    nope.

    Complexity: