https://leetcode.com/problems/search-a-2d-matrix-ii/#/description
Write an efficient algorithm that searches for a value in an m x n matrix. This 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.
For example,
Consider the following 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] ]
Given target = 5
, return true
.
Given target = 20
, return false
.
Sol :
class Solution(object): def searchMatrix(self, matrix, target): """ :type matrix: List[List[int]] :type target: int :rtype: bool """ # exclusive method # Time O(M+N) Space O(1) # Compare the target with the top right corner element of the martix. If target < right corner, search target on area with smaller values, i.e. go leftwards; if target > right corner, search target on area with bigger values, i.e. go downwards. if len(matrix) == 0 or len(matrix[0]) == 0: return False # start from the top right corner, and compare matrix[i][j] with target i = 0 j = len(matrix[0]) - 1 while i< len(matrix) and j >= 0: x = matrix[i][j] if target == x: return True elif x < target: # search target on the lower side i += 1 else: # search target on the left side j -= 1 return False