题目:
编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:
- 每行中的整数从左到右按升序排列。
- 每行的第一个整数大于前一行的最后一个整数。
算法:
二分搜索的变形
func searchMatrix(matrix [][]int, target int) bool {
n := len(matrix)
m := len(matrix[0])
left, right := 0, n * m - 1
for left < right {
mid := (left + right) / 2
i := mid / m
j := mid % m
if matrix[i][j] == target {
return true
} else if matrix[i][j] < target {
left = mid + 1
} else {
right = mid - 1
}
}
return matrix[left / m][left % m] == target
}