题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
分析:数组中任意找一个数,它的左边都小于它,它的下边都大于它。如果要找的数(target)大于这个数,那就向下找;小于这个数就向左找。那么我们应该取哪个数与target做比较呢?首先我们先想到是数组四个角的数,第一个数和最后一个数都不行(因为他们右下或左上与它们的关系是一样的,要么都大于它,要么都小于它,这样我们没法做上面的判断);所以我们可以取右上角或者左下角的数开始判断,下面就是代码:
方法1:选取右上角的数为初始判断点
function Find(target, array)
{
// write code here
var row=array.length,
col=array[0].length,
i=0,
j=col-1;
while(i<row&&j>=0){
if(array[i][j]>target){
j--;
continue;
}else if(array[i][j]<target){
i++;
continue;
}else{
return true;
}
return false;
}
}
方法二:选取左下角的数为初始判断点
function Find(target, array)
{
// write code here
var row=array.length,
col=array[0].length,
i=row-1,
j=0;
while(i>=0&&j<col){
if(array[i][j]>target){
i--;
continue;
}else if(array[i][j]<target){
j++;
continue;
}else{
return true;
}
return false;
}
}
博客围绕在二维有序数组(每行从左到右、每列从上到下递增)中查找整数展开。分析指出可利用数组元素大小关系,选取右上角或左下角的数作为初始判断点,根据目标数与判断点的大小关系决定查找方向,还提及了其他角的数不适合作为判断点的原因。
881

被折叠的 条评论
为什么被折叠?



