老卫带你学---leetcode刷题(240. 搜索二维矩阵 II)

240. 搜索二维矩阵 II

问题:

编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:

每行的元素从左到右升序排列。
每列的元素从上到下升序排列。

示例 1:


输入: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
输出:true
示例 2:


输入: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
输出:false
提示:

m == matrix.length
n == matrix[i].length
1 <= n, m <= 300
-109 <= matrix[i][j] <= 109
每行的所有元素从左到右升序排列
每列的所有元素从上到下升序排列
-109 <= target <= 109

解决:

从左下角开始遍历
搜索遍历的过程中注意,使用每行的元素从左到右升序排列,每列的元素从上到下升序排列的规律。:

  • matrix[i][j] 如果比target大,那就只用看比i小的行
  • matrix[i][j] 如果比target小,那就只用看比j大的列
class Solution:
    def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
      i,j = len(matrix)-1,0
      while i>=0 and j<len(matrix[0]):
        if matrix[i][j]>target: i-=1
        elif matrix[i][j]<target: j+=1
        else:return True
      return False

你可能感兴趣的:(leetcode)