diff --git a/apps/docs/content/(array)/74-search-a-2d-matrix.mdx b/apps/docs/content/(array)/74-search-a-2d-matrix.mdx new file mode 100644 index 0000000..3af2355 --- /dev/null +++ b/apps/docs/content/(array)/74-search-a-2d-matrix.mdx @@ -0,0 +1,61 @@ +--- +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' +--- + +Binary Search + +::::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 +```