题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
题目分析
根据题目可知,数组的每一行以及每一列都是有序的,对于有序数组的查找,最有效的当然就是二分查找了,二分查找不必多说,不过在这里由于每一行都需要查找一次,那么复杂度就为O(mlogn),
直接给出代码:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
if(matrix.empty())return false; //空数组返回false
int row=matrix.size();
int col=matrix[0].size();
if(!col||target>matrix[row-1][col-1]||target<matrix[0][0])return false; //数组的右下角元素必定是最大的,数组左上角一定是最小的
int right_lim=col-1;
for(int i=0;i<row;i++)
{
int l=0,h=right_lim;
while(l<=h) //二分查找
{
int mid=l+(h-