Skip to content

Commit 0df78b2

Browse files
committed
Search a 2D matrix solution
1 parent 5d14dad commit 0df78b2

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed

74_search_2D_matrix.py

+62
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
class Solution(object):
2+
# def searchMatrix(self, matrix, target):
3+
# """
4+
# :type matrix: List[List[int]]
5+
# :type target: int
6+
# :rtype: bool
7+
# """
8+
# try:
9+
# ls_row, ls_col = len(matrix), len(matrix[0])
10+
# except:
11+
# return False
12+
# begin, end = 0, ls_row - 1
13+
# while begin <= end:
14+
# mid = (begin + end) / 2
15+
# res = self.search_row(matrix, mid, target)
16+
# if res == 0:
17+
# return True
18+
# elif res < 0:
19+
# end = mid - 1
20+
# else:
21+
# begin = mid + 1
22+
# return False
23+
#
24+
#
25+
# def search_row(self, matrix, row, target):
26+
# if target < matrix[row][0]:
27+
# return -1
28+
# elif target > matrix[row][-1]:
29+
# return 1
30+
# begin, end = 0, len(matrix[row]) - 1
31+
# while begin <= end:
32+
# mid = (begin + end) / 2
33+
# if matrix[row][mid] == target:
34+
# return 0
35+
# elif matrix[row][mid] < target:
36+
# begin = mid + 1
37+
# else:
38+
# end = mid - 1
39+
# return 1
40+
41+
42+
def searchMatrix(self, matrix, target):
43+
# binary search
44+
try:
45+
ls_row, ls_col = len(matrix), len(matrix[0])
46+
except:
47+
return False
48+
if target < matrix[0][0] or target > matrix[-1][-1]:
49+
return False
50+
begin, end = 0, ls_row * ls_col - 1
51+
while begin <= end:
52+
mid = (begin + end) / 2
53+
row, col = mid / ls_col, mid % ls_col
54+
if matrix[row][col] == target:
55+
return True
56+
elif matrix[row][col] > target:
57+
end = mid - 1
58+
else:
59+
begin = mid + 1
60+
return False
61+
62+

0 commit comments

Comments
 (0)