美文网首页
[刷题]1.二维数组查找

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

作者: AceCream佳 | 来源:发表于2017-03-23 19:18 被阅读0次

    题目

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

    解题思路

    这题乍一看还是听费劲的,而且根本没给测试用例,这可咋验证对错?既然题里没给,那就自己写个简单的测试用例吧:
    我是这么做的,创建一个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));
        }
    }
    

    相关文章

      网友评论

          本文标题:[刷题]1.二维数组查找

          本文链接:https://www.haomeiwen.com/subject/aeptottx.html