题目如下:这两个题目可以用同样的代码来解答,因此就合并在一起了。
题目一:
题目二:
解题思路:两个题目的唯一区别在于第二个题目下一行的最小值不一定会小于前一行的最大值。但是不管怎么样我们可以确定的是,如果某一行的最小值都比target要大,那么这一行之后的值都比target要大。如果target介于某一行的最小值和最大值之间,那么target有可能在这一行。至于如何判断target是否存在,因为数组有序,用二分查找即可。
代码如下:
class Solution(object): def searchMatrix(self, matrix, target): import bisect ROW = len(matrix) if ROW == 0: return False COLUMN = len(matrix[0]) if COLUMN == 0: return False for i in matrix: if i[0] <= target and i[-1] >= target: inx = bisect.bisect_left(i,target) if i[inx] == target: return True elif i[0] > target: break return False