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]
|