74 搜索二维矩阵-中等
题目:
给你一个满足下述两条属性的 m x n
整数矩阵:
每行中的整数从左到右按非严格递增顺序排列。
每行的第一个整数大于前一行的最后一个整数。
给你一个整数 target
,如果 target
在矩阵中,返回 true
;否则,返回 false
。
分析:
先对每一行的第一个元素进行 LastEqualOrSmaller 二分查找,找到相应的行,然后在进行 FirstEqual 查找。
// date 2023/12/04
func searchMatrix(matrix [][]int, target int) bool {
m := len(matrix)
up, down := 0, m-1
// find the last equal or smaller
for up <= down {
mid := (up + down) / 2
if matrix[mid][0] > target {
down = mid - 1
} else {
up = mid + 1
}
}
// find
if down >= 0 && down < m {
// find col
n := len(matrix[down])
left, right := 0, n-1
for left <= right {
mid := (left + right) / 2
if matrix[down][mid] == target {
return true
} else if matrix[down][mid] < target {
left = mid + 1
} else {
right = mid - 1
}
}
}
return false
}
最后更新于