361. Bomb Enemy

Posted tobeabetterpig

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了361. Bomb Enemy相关的知识,希望对你有一定的参考价值。

Given a 2D grid, each cell is either a wall ‘W‘, an enemy ‘E‘ or empty ‘0‘ (the number zero), return the maximum enemies you can kill using one bomb.?The bomb kills all the enemies in the same row and column from the planted point until it hits the wall since the wall is too strong to be destroyed.?Note: You can only put the bomb at an empty cell.
Example:
Input: [["0","E","0","0"],["E","0","W","E"],["0","E","0","0"]]
Output: 3 
Explanation: For the given grid,

0 E 0 0 
E 0 W E 
0 E 0 0

Placing a bomb at (1,1) kills 3 enemies.




Walk through the matrix. At the start of each non-wall-streak (row-wise or column-wise), count the number of hits in that streak and remember it. O(mn) time, O(n) space.

int maxKilledEnemies(vector<vector<char>>& grid) {
    int m = grid.size(), n = m ? grid[0].size() : 0;
    int result = 0, rowhits, colhits[n];
    for (int i=0; i<m; i++) {
        for (int j=0; j<n; j++) {
            if (!j || grid[i][j-1] == ‘W‘) {
                rowhits = 0;
                for (int k=j; k<n && grid[i][k] != ‘W‘; k++)
                    rowhits += grid[i][k] == ‘E‘;
            }
            if (!i || grid[i-1][j] == ‘W‘) {
                colhits[j] = 0;
                for (int k=i; k<m && grid[k][j] != ‘W‘; k++)
                    colhits[j] += grid[k][j] == ‘E‘;
            }
            if (grid[i][j] == ‘0‘)
                result = max(result, rowhits + colhits[j]);
        }
    }
    return result;
}

 

以上是关于361. Bomb Enemy的主要内容,如果未能解决你的问题,请参考以下文章

java 361. Bomb Enemy(1st).java

java 361. Bomb Enemy(1st).java

java 361. Bomb Enemy(1st).java

java 361. Bomb Enemy(1st).java

java 361. Bomb Enemy(1st).java

java 361. Bomb Enemy(1st).java