240 搜索二维矩阵-中等

题目:

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

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

  • 每列的元素从上到下升序排列。

分析:

因为矩阵是每行升序,每列升序,所以可以以右上角的元素为基准。

如果右上角元素大于目标值,那么这一列不会有答案;

如果右上角元素小于目标值,那么这一行不会有答案;

// date 2023/12/05
func searchMatrix(matrix [][]int, target int) bool {
    m := len(matrix)
    n := len(matrix[0])
    // Z 字查找
    x, y := 0, n-1
    for x < m && y >= 0 {
        if matrix[x][y] == target {
            return true
        } else if matrix[x][y] > target {  // 说明这一列不可能有
            y--
        } else { // 说明这一行不可能存在答案
            x++
        }
    }
    return false
}

最后更新于