这是第32篇算法,力扣链接
编写一个高效的算法来搜索
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
这道题最基本的方法还是暴力查找暴力查找的话和之前的字母班上的路径是一个原理
func searchMatrix(matrix [][]int, target int) bool {
width, high, wMax := 0, len(matrix[0])-1, len(matrix)
for width < wMax && high >= 0 {
if matrix[width][high] == target {
return true
} else if matrix[width][high] > target {
high--
} else {
width++
}
}
return false
}
当然还有一种优化方法,那就是每一行去做二分法查找,找不到就找下一行
func searchMatrix(matrix [][]int, target int) bool {
for _, row := range matrix {
left, right := 0, len(row)-1
for left <= right {
mid := (left + right) / 2
if row[mid] == target {
return true
} else if row[mid] > target {
right--
} else {
left++
}
}
}
return false
}