-
Notifications
You must be signed in to change notification settings - Fork 57
/
Solution.py
76 lines (61 loc) · 2.05 KB
/
Solution.py
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
"""
Write an efficient algorithm that searches for a target value in an m x n integer matrix. The matrix has the following properties:
Integers in each row are sorted in ascending from left to right.
Integers in each column are sorted in ascending from top to bottom.
Example 1:
Input: matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5
Output: true
Example 2:
Input: matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 20
Output: false
Constraints:
m == matrix.length
n == matrix[i].length
1 <= n, m <= 300
-109 <= matix[i][j] <= 109
All the integers in each row are sorted in ascending order.
All the integers in each column are sorted in ascending order.
-109 <= target <= 109
"""
class Solution:
def searchMatrix(self, matrix, target):
"""
:type matrix: List[List[int]]
:type target: int
:rtype: bool
"""
def search(row, target):
start, end = 0, len(row) - 1
while start < end - 1:
mid = (start + end) // 2
if row[mid] == target:
return mid
elif target > row[mid]:
start = mid
else:
end = mid - 1
return end if row[end] == target else start
### method 1
# if not matrix or not matrix[0]:
# return False
# for row in matrix:
# if row[0] > target:
# break
# col_idx = search(row, target)
# if 0 <= col_idx < len(row) and row[col_idx] == target:
# return True
# return False
### method 2
if not matrix or not matrix[0]:
return False
col, row = len(matrix[0]) - 1, 0
while col >= 0 and row < len(matrix):
if target == matrix[row][col]:
return True
elif target > matrix[row][col]:
row += 1
else:
col -= 1
return False