【精】LintCode领扣算法问题答案:1906. 寻找比周围都大的点

    科技2022-08-08  109

    1906. 寻找比周围都大的点

    描述

    给一个 n * m 大小的矩阵,寻找矩阵中所有比邻居(上下左右,对角也算,不考虑边界就是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 // 每个点周围8个点的相对位置 //final int[][] ps = new int[][]{new int[]{-1, -1}, new int[]{-1, 0}, new int[]{-1, 1}, new int[]{0, -1}, new int[]{0, 1}, new int[]{1, -1}, new int[]{1, 0}, new int[]{1, 1}}; // 这里只有7个,lintcode这道题的检查有问题,右上角的点它貌似没检查,我们检查了反而不过,所以也不检查 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}}; // 最大行 int n = grid.length; // 最大列 int m = grid[0].length; // 返回的结果 int[][] ret = new int[n][m]; // 遍历矩阵 for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { // 是否大于周围8个点 boolean isMax = true; for (int[] p : ps) { // 当前点加上周围点的相对位置得到周围点 int row = p[0] + i; int col = p[1] + j; // 边界判断 if (row >= 0 && row < n && col >= 0 && col < m) { // 如果周围点大于等于当前点则当前点不是大于周围所有点 if (grid[row][col] >= grid[i][j]) { isMax = false; break; } } } if (isMax) { ret[i][j] = 1; } else { ret[i][j] = 0; } } } return ret; } }

    最后说两句

    非常感谢你阅读本文章,如果你觉得本文对你有所帮助,请留下你的足迹,点个赞,留个言,多谢~

    作者水平有限,如果文章内容有不准确的地方,请指正。

    希望小伙伴们都能每天进步一点点。

    声明

    本文由二当家的白帽子博客原创,转载请注明来源,谢谢~

    Processed: 0.009, SQL: 8