search-2d-matrix py3
This commit is contained in:
parent
6925c6815f
commit
382be1e683
29
0074_search-a-2d-matrix/README.md
Normal file
29
0074_search-a-2d-matrix/README.md
Normal file
@ -0,0 +1,29 @@
|
||||
Write an efficient algorithm that searches for a value `target` in an `m x n` integer matrix `matrix`. This matrix has the following properties:
|
||||
|
||||
* Integers in each row are sorted from left to right.
|
||||
* The first integer of each row is greater than the last integer of the previous row.
|
||||
|
||||
**Example 1:**
|
||||
|
||||
![](https://assets.leetcode.com/uploads/2020/10/05/mat.jpg)
|
||||
|
||||
Input: matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3
|
||||
Output: true
|
||||
|
||||
|
||||
**Example 2:**
|
||||
|
||||
![](https://assets.leetcode.com/uploads/2020/10/05/mat2.jpg)
|
||||
|
||||
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`
|
||||
* `-104 <= matrix[i][j], target <= 104`
|
||||
|
||||
https://leetcode.com/problems/search-a-2d-matrix/
|
42
0074_search-a-2d-matrix/python3/solution.py
Normal file
42
0074_search-a-2d-matrix/python3/solution.py
Normal file
@ -0,0 +1,42 @@
|
||||
class Solution:
|
||||
def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
|
||||
'''
|
||||
Two binary searches, first across rows and then
|
||||
across columns to quickly find the target
|
||||
'''
|
||||
|
||||
mid = -1
|
||||
start, end = 0, len(matrix) - 1
|
||||
|
||||
# Figure out which row the number belongs to
|
||||
while start <= end:
|
||||
mid = (start + end) // 2
|
||||
|
||||
if target > matrix[mid][-1]:
|
||||
start = mid + 1
|
||||
elif target < matrix[mid][0]:
|
||||
end = mid - 1
|
||||
else:
|
||||
break
|
||||
|
||||
# If we never managed to find a row, that means number
|
||||
# doesn't exist
|
||||
if not start <= end:
|
||||
return False
|
||||
|
||||
# The row to search
|
||||
row = matrix[mid]
|
||||
start, end = 0, len(row) - 1
|
||||
|
||||
while start <= end:
|
||||
mid = (start + end) // 2
|
||||
|
||||
if target == row[mid]:
|
||||
return True
|
||||
elif target > row[mid]:
|
||||
start = mid + 1
|
||||
else:
|
||||
end = mid - 1
|
||||
|
||||
return False
|
||||
|
Loading…
Reference in New Issue
Block a user