Sort by

recency

|

857 Discussions

|

  • + 0 comments

    Here is my c++ solution, you can watch the explanation here : https://youtu.be/BweZoGPs08M

    vector<string> cavityMap(vector<string> grid) {
        for(int i = 1; i < grid.size() - 1; i++){
            for(int j = 1; j < grid[i].size()-1; j++){
                if(grid[i][j] > grid[i][j-1] && grid[i][j] > grid[i][j+1])
                    if(grid[i][j] > grid[i-1][j] && grid[i][j] > grid[i+1][j])
                    grid[i][j] = 'X'; 
            }
        }
        return grid;
    }
    
  • + 0 comments
    def cavityMap(n,grid):
        ans=[[0 for _ in range(n)] for _ in range(n)]
        for i in range(1,n-1):
            for j in range(1,n-1):
                mat=[int(grid[i][j+1]),int(grid[i-1][j]),int(grid[i+1][j]),int(grid[i][j-1])]
                if int(grid[i][j])>max(mat):
                    ans[i][j]='X'
        for k in range(n):
            for l in range(n):
                if ans[k][l]=='X':
                    pass
                else:
                    ans[k][l]=grid[k][l]
        res=[]
        for row in ans:
            res.append(''.join(map(str,row)))
        return res
    
  • + 0 comments

    Here is my Python code utilizing list comprehensions! However, this does result in a line being incredibly long.

    def cavityMap(grid):
        changes = [(i + 1, num + 1) for i in range(len(grid) - 2) for num in range(len(grid[i + 1]) - 2) if grid[i + 1][num] < grid[i + 1][num + 1] and grid[i + 1][num + 1] > grid[i + 1][num + 2] and grid[i][num + 1] < grid[i + 1][num + 1] and grid[i + 2][num + 1] < grid[i + 1][num + 1]]
        for change in changes:
            grid[change[0]] = grid[change[0]][:change[1]] + "X" + grid[change[0]][change[1] + 1:]
        return grid
    
  • + 0 comments

    Java

    public static List<String> cavityMap(List<String> grid) {
            for (int i = 1; i < grid.size() - 1; i++) {
                for (int j = 1; j < grid.get(i).length() - 1; j++) {
                    int currentDigit = Character.getNumericValue(grid.get(i).charAt(j));
                    int upDigit = Character.getNumericValue(grid.get(i-1).charAt(j));
                    int downDigit = Character.getNumericValue(grid.get(i+1).charAt(j));
                    int leftDigit = Character.getNumericValue(grid.get(i).charAt(j-1));
                    int rightDigit = Character.getNumericValue(grid.get(i).charAt(j+1));
                    if (currentDigit > upDigit 
                        && currentDigit > downDigit 
                        && currentDigit > leftDigit
                        && currentDigit > rightDigit) {
                            StringBuilder newRow = new StringBuilder(grid.get(i));
                            newRow.setCharAt(j, 'X');
                            grid.set(i, newRow.toString());
                    }
                }
            }
            return grid;
        }
    
  • + 0 comments

    Python3, straightforward, nothing smart; Python is not the best tool here, as its for loops cost a lot and replacing single string means recreating whole row

    def is_cavity(grid, i, j):
        max_adjacent = max(
            grid[i-1][j],
            grid[i+1][j],
            grid[i][j-1],
            grid[i][j+1]
        )
        return grid[i][j] > max_adjacent
    
    def mark_cavity(grid, i, j):
        row: str = grid[i]
        grid[i] = row[:j] + 'X' + row[j+1:]
    
    def cavityMap(grid):
        n = len(grid)
        cavity_mapped_grid = [row[:] for row in grid] 
        for i in range(1, n-1):
            for j in range(1, n-1):
                if is_cavity(grid, i, j):
                    mark_cavity(cavity_mapped_grid, i, j)
        return cavity_mapped_grid