请写出一个高效的在m*n矩阵中判断目标值是否存在的算法,矩阵具有如下特征:
每一行的数字都从左到右排序
每一行的第一个数字都比上一行最后一个数字大
<?php
/**
* @param $arrMatrix
* @param $target
* @return boolean
* @brief 二分查找
*/
function searchMatrix($arrMatrix, $target) {
$length = count($arrMatrix);
$width = count($arrMatrix[0]);
$start = 0;
$end = $length * $width - 1;
while ($start <= $end) {
print $start . "\t" . $end ."\n";
$mid = floor(($start + $end) / 2);
if ($arrMatrix[floor($mid / $width)][$mid % $width] == $target) {
return true;
}
if ($arrMatrix[floor($mid / $width)][$mid % $width] > $target) {
$end = $mid - 1;
}
if ($arrMatrix[floor($mid / $width)][$mid % $width] < $target) {
$start = $mid + 1;
}
}
return false;
}
$arr = [
[1,3,5,7],
[10,11,16,20],
[23,30,34,50],
];
$ret = searchMatrix($arr, 31);
print intval($ret);