在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
这道题借鉴了别人的思想 ,想明白之后,自己敲出来了。
解题思路是:这是一个二维有序数组,如果我们要在这里面找到目标值,共有四个角可以作为切入点,但是左上角和右下角有同样的问题,在判断之后又分岔路的问题,这两个角,两个方向上都是增大的,对于我们解题没有任何益处。但是左下角和右上角,在判断之后可以选择一条路进行下面的判断,本例中以左下角为 例,如果左下角的那个值大于目标值,那么说明目标值小,那么我们此时应该让行递减,如果左下角那个值小于目标值,那么说明目标值大,那么我们此时应该让列递增。
在明晰了思路之后,开始code
var a=[[1,2,3],[4,5,6],[7,8,9]]
function Find(arr,target){
var hang=arr.length; //行
var lie=arr[0].length; //列
// 将位置定位到左下角
var i=hang-1
var j=0;
//如果行列都等于零,就没必要判断啦
if(hang===0&&lie===0){
return false;
}
while(i>=0&&j<=lie-1){
// 如果左下角的值大于需要找的目标值,那么就应该向上走,此时行应该减少
if(a[i][j]>target){
i--;
}
// 如果左下角的值小于需要找的目标值,那么就应该向左走 此时列应该增加
else if(a[i][j]<target){
j++;
}
else{
console.log(i,j);
}
}
//如果此时i递减到小于0或者j递增到大于lie-1,就说明没找到
if(i<0||j>lie-1){
return false;
}
}
Find(a,5)