继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

剑指offer 二维数组中的查找

qq_大脸猫_8
关注TA
已关注
手记 9
粉丝 0
获赞 15

在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
这道题借鉴了别人的思想 ,想明白之后,自己敲出来了。
解题思路是:这是一个二维有序数组,如果我们要在这里面找到目标值,共有四个角可以作为切入点,但是左上角和右下角有同样的问题,在判断之后又分岔路的问题,这两个角,两个方向上都是增大的,对于我们解题没有任何益处。但是左下角和右上角,在判断之后可以选择一条路进行下面的判断,本例中以左下角为 例,如果左下角的那个值大于目标值,那么说明目标值小,那么我们此时应该让行递减,如果左下角那个值小于目标值,那么说明目标值大,那么我们此时应该让列递增。
在明晰了思路之后,开始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)
打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP