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 {
public int[][] highpoints(int[][] grid
) {
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
++) {
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
;
}
}
最后说两句
非常感谢你阅读本文章,如果你觉得本文对你有所帮助,请留下你的足迹,点个赞,留个言,多谢~
作者水平有限,如果文章内容有不准确的地方,请指正。
希望小伙伴们都能每天进步一点点。
声明
本文由二当家的白帽子博客原创,转载请注明来源,谢谢~