探索二维矩阵——二分

190 阅读1分钟

image.png

代码 1 两次二分:

sort.Search(n int, f func(int) bool), 会返回[0,n)中最小满足条件的值,如果没有,则返回 n

sort.SearchInts, 返回在数组中查找的值的位置,如果不存在,会返回应该插入的位置

func searchMatrix(matrix [][]int, target int) bool {
    row := sort.Search(len(matrix), func(i int) bool { return matrix[i][0] > target }) - 1
    if row < 0 {
        return false
    }
    col := sort.SearchInts(matrix[row], target)
    return col < len(matrix[row]) && matrix[row][col] == target
}

代码 2 一次二分:

func searchMatrix(matrix [][]int, target int) bool {
    m, n := len(matrix), len(matrix[0])
    i := sort.Search(m*n, func(i int) bool { return matrix[i/n][i%n] >= target })
    return i < m*n && matrix[i/n][i%n] == target
}