Sort by

recency

|

856 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

    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
    
  • + 0 comments

    Solution from my side, i know that it is not well oprimized. but the logic of this solution is in the understandable format.

    def cavityMap(grid):
        data = []
        result = []
        indexData = []
    
        for item in grid:
            data.append(list(item))
    
        for i in range(1,len(data)-1):
            for j in range(1,len(data)-1):
                if(data[i][j+1]<data[i][j]> data[i][j-1] and data[i+1][j]<data[i][j]> data[i-1][j]):
                    indexData.append([i,j])
    
        for item01 in indexData:
            data[item01[0]][item01[1]] = 'X'
    
        for item03 in data:
            result.append(''.join(item03))
            
        return result