mirror of
https://github.com/prdlk/leetcode.git
synced 2026-11-02 13:12:44 +00:00
62 lines
1.4 KiB
Plaintext
62 lines
1.4 KiB
Plaintext
---
|
|
title: '74. Search a 2D Matrix'
|
|
description: 'You are given an m x n integer matrix matrix with the following two properties:'
|
|
sidebar:
|
|
label: 'Search a 2D Matrix'
|
|
badge: 'Medium'
|
|
---
|
|
|
|
<Badge variant="accent">Binary Search</Badge>
|
|
|
|
::::warning
|
|
You must write a solution in O(log(m * n)) time complexity.
|
|
::::
|
|
|
|
### Example 1:
|
|
- Input: `matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3`
|
|
- Output: `true`
|
|
|
|
### Example 2:
|
|
- Input: `matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13`
|
|
- Output: `false`
|
|
|
|
### Constraints:
|
|
|
|
- `m == matrix.length`
|
|
- `n == matrix[i].length`
|
|
- `1 <= m, n <= 100`
|
|
- `-10^4 <= matrix[i][j], target <= 10^4`
|
|
|
|
## Solution
|
|
|
|
```py
|
|
class Solution:
|
|
def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
|
|
ROWS, COLS = len(matrix), len(matrix[0])
|
|
|
|
top, bot = 0, ROWS - 1
|
|
while top <= bot:
|
|
row = (top + bot) // 2
|
|
if target > matrix[row][-1]:
|
|
top = row + 1
|
|
elif target < matrix[row][0]:
|
|
bot = row - 1
|
|
else:
|
|
break
|
|
|
|
if not (top <= bot):
|
|
return False
|
|
|
|
row = (top + bot) // 2
|
|
l, r = 0, COLS - 1
|
|
while l <= r:
|
|
m = (l + r) // 2
|
|
if target > matrix[row][m]:
|
|
l = m + 1
|
|
elif target < matrix[row][m]:
|
|
r = m - 1
|
|
else:
|
|
return True
|
|
return False
|
|
```
|