1901. 寻找峰值 II

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
27
28
29
30
31
32
33
34
35
36
37
38
class Solution:
def findPeakGrid(self, mat: List[List[int]]) -> List[int]:
def check(x, y):
for a, b in [[x - 1, y], [x + 1, y], [x, y - 1], [x, y + 1]]:
if 0 <= a < m and 0 <= b < n and mat[a][b] > mat[x][y]:
return False
return True

m, n = len(mat), len(mat[0])
for i in range(m):
low = 0
high = n - 1
while low < high - 1:
mid = low + (high - low) // 2
if mat[i][mid] < mat[i][mid + 1]:
low = mid
else:
high = mid
if check(i, low):
return [i, low]
if check(i, high):
return [i, high]

for j in range(n):
low = 0
high = m - 1
while low < high - 1:
mid = low + (high - low) // 2
if mat[mid][j] < mat[mid + 1][j]:
low = mid
else:
high = mid
if check(low, j):
return [low, j]
if check(high, j):
return [high, j]

return [-1, -1]