[刷题]1.二维数组查找

题目

在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

解题思路

这题乍一看还是听费劲的,而且根本没给测试用例,这可咋验证对错?既然题里没给,那就自己写个简单的测试用例吧:
我是这么做的,创建一个5x5的二维数组,并且按照题目要求简单的添加上数字。我是输出5x5个0,然后先按行赋值,然后再给每列重新赋值。输出是这个样:
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
5 6 7 8 9

然后就可以思考这题了。我们观察上面的输出:
左下角和右上角是个好地方,都可以作为开始。拿左下角来说:如果target小于左下角的5,则向上移动,如果大于左下角的5,则向右移动。这样循环下去,走完了还没找到那应该是真找不到了。。。
具体的解法写在了代码中:

完整代码

/**
 * Created by AceCream on 2017/3/22.
 * 在一个二维数组中,每一行都按照从左到右递增的顺序排序,
 * 每一列都按照从上到下递增的顺序排序。请完成一个函数,
 * 输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
 */
public class Test{

    public boolean Find(int target, int [][] array) {
        //显示二维数组:
//        for (int i=0;i<array.length;i++){
//            for (int j=0;j<array.length;j++){
//                System.out.print(array[i][j]+" ");
//            }
//            System.out.println();
//        }
        int len = array.length-1;
        int wid = 0;
        while (len>=0 && wid<array[0].length){

            if (array[len][wid]>target){
                len--;
            }else if (array[len][wid]<target){
                wid++;
            }else {
                return true;
            }
        }
        return false;
    }

    public static void main(String[] args) {
        int temp = 99;
        int[][] a = new int[5][5];
        for (int i=0;i<a.length;i++){
            for (int j=0;j<a.length;j++){
                a[i][j]=j+1;
            }
            for (int k=0;k<a[0].length;k++){
                a[i][k] = i+k+1;
            }

        }
        Test test = new Test();
        System.out.println(test.Find(temp,a));
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容