代码 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
}