mirror of
https://github.com/prdlk/leetcode.git
synced 2026-09-16 23:16:26 +00:00
feat(work): add solution for LeetCode 74 Search a 2D Matrix problem
This commit is contained in:
@@ -0,0 +1,74 @@
|
|||||||
|
"""
|
||||||
|
74. Search a 2D Matrix
|
||||||
|
Difficulty: Medium
|
||||||
|
https://leetcode.com/problems/search-a-2d-matrix/
|
||||||
|
|
||||||
|
──────────────────────────────────────────────────
|
||||||
|
|
||||||
|
You are given an m x n integer matrix matrix with the following two
|
||||||
|
properties:
|
||||||
|
|
||||||
|
• Each row is sorted in non-decreasing order.
|
||||||
|
|
||||||
|
• The first integer of each row is greater than the last integer of
|
||||||
|
the previous row.
|
||||||
|
|
||||||
|
Given an integer target, return true if target is in matrix or false
|
||||||
|
otherwise.
|
||||||
|
|
||||||
|
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
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
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
|
||||||
Reference in New Issue
Block a user