题目:
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路:
若使用目标整数与数组每个数进行比较,时间复杂度O(n^2)。不采用。
考虑到二维数组每行每列的数字具有递增的顺序排序,因此可以根据递增排序的特点进行查找。每次比较删除某一行或某一列。时间复杂度O(n)。
如图所示,target和数组左下角的数进行比较,若target>n[i][j],因为数组列递增,所以target不可能在第一列,移动到下一列继续比较;若target>n[i][j]则说明target可能在第一列,即在第一列中向上移动到上一行继续比较。
int raw=array.size();
int col=array[0].size();
if(array.empty()&&raw>0&&col>0)//输入判断
return false ;
int i=raw-1,j=0;
while(i>=0&&j<col){
if(target==array[i][j])
return true;
else if(target>array[i][j])
j++;
else
i--;
}
return false;
}