0%

1901-寻找峰值-II

题目地址:https://leetcode.cn/problems/find-a-peak-element-ii

题目

一个 2D 网格中的 峰值 是指那些 严格大于 其相邻格子(上、下、左、右)的元素。

给你一个 从 0 开始编号 的 m x n 矩阵 mat ,其中任意两个相邻格子的值都 不相同 。找出 任意一个 峰值 mat[i][j] 并 返回其位置 [i,j] 。

你可以假设整个矩阵周边环绕着一圈值为 -1 的格子。

要求必须写出时间复杂度为 O(m log(n)) 或 O(n log(m)) 的算法

解题思路

今天的题有点简单,直接遍历二维数组,找到比相邻元素大的元素返回即可。需要注意一点就是,不存在的元素需要赋值-1,不然比较的时候会出错。

答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/**
* @param {number[][]} mat
* @return {number[]}
*/
var findPeakGrid = function(mat) {
const m = mat.length
const n = mat[0].length
for(let i = 0; i < m; i ++) {
for(let j = 0; j < n; j ++) {
if( mat[i][j] > exits(mat, i-1, j-1) &&
mat[i][j] > exits(mat, i, j-1) &&
mat[i][j] > exits(mat, i+1, j) &&
mat[i][j] > exits(mat, i, j+1)
) {
return [i, j]
}
}
}
};

function exits(val, i, j) {
if(val[i] === undefined || val[i][j] === undefined) {
return -1
}
return val[i][j]
}