領釦LintCode演演算法問題答案-1906. 尋找比周圍都大的點

2020-10-12 13:00:15

領釦LintCode演演算法問題答案-1906. 尋找比周圍都大的點

1906. 尋找比周圍都大的點

描述

給一個nm大小的矩陣,尋找矩陣中所有比鄰居(上下左右,對角也算,不考慮邊界就是8個咯)都嚴格大的點。
返回一個n
m大小的矩陣,如果原矩陣中的點比鄰居都嚴格大,則該位置為1,反之為0。

  • 1 ≤ n,m ≤ 100

樣例 1:

輸入:
1 2 3
4 5 8
9 7 0

輸出:
0 0 0
0 0 1
1 0 0

題解

public class Solution {
    /**
     * @param grid: a matrix
     * @return: Find all points that are strictly larger than their neighbors
     */
    public int[][] highpoints(int[][] grid) {
        // write your code here
        final int[][] ps = new int[][]{new int[]{-1,-1}, new int[]{-1, 0}, new int[]{0, -1}, new int[]{0, 1}, new int[]{1,-1}, new int[]{1,0}, new int[]{1,1}};
        if (grid == null) {
            return grid;
        }
        int r = grid.length;
        if (r == 0) {
            return grid;
        }
        int c = grid[0].length;
        if (c == 0) {
            return grid;
        }
        int[][] ret = new int[r][c];
        for (int i = 0; i < r; i++) {
            for (int j = 0; j < c; j++) {
                boolean max = true;
                for (int[] p : ps) {
                    int row = p[0] + i;
                    int col = p[1] + j;
                    if (row >= 0
                        && row < r 
                        && col >=0
                        && col < c) {
                        if (grid[row][col] >= grid[i][j]) {
                            max = false;
                            break;
                        }
                    }
                }
                if (max) {
                    ret[i][j] = 1;
                } else {
                    ret[i][j] = 0;
                }
            }
        }

        return ret;
    }
}

原題連結點這裡

鳴謝

非常感謝你願意花時間閱讀本文章,本人水平有限,如果有什麼說的不對的地方,請指正。
歡迎各位留言討論,希望小夥伴們都能每天進步一點點。