请写出一个高效的在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);