Search A 2 D Matrix
搜索二维矩阵
题目描述
编写一个高效的算法,来判断mxn
矩阵中,是否存在一个目标值。该矩阵具有如下特性:
每行中的整数从左到右按升序排列。
每行的第一个整数大于前一行的最后一个整数。
示例:
输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,50]], target = 3
输出:true
解法:
解法一:二分法
二分法的主要思想就是:将该二维矩阵视为一维有序数组。
时间复杂度:
O(logn)
空间复杂度:
O(1)
func searchMatrix(matrix [][]int, target int) bool {
if len(matrix) == 0 || len(matrix[0]) == 0 {
return false
}
r, c := len(matrix), len(matrix[0])
left, right := 0, r*c-1
for left <= right {
mid := left + (right-left)/2
midV := matrix[mid/c][mid%c]
if midV == target {
return true
}
if midV > target {
right = mid - 1
} else {
left = mid + 1
}
}
return false
}
Last updated
Was this helpful?