题目描述:

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

 

输入:

输入可能包含多个测试样例,对于每个测试案例,

输入的第一行为两个整数m和n(1<=m,n<=1000):代表将要输入的矩阵的行数和列数。

输入的第二行包括一个整数t(1<=t<=1000000):代表要查找的数字。

接下来的m行,每行有n个数,代表题目所给出的m行n列的矩阵(矩阵如题目描述所示,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。

 

输出:

对应每个测试案例,

输出”Yes”代表在二维数组中找到了数字t。

输出”No”代表在二维数组中没有找到数字t。

 

样例输入:
3 3
5
1 2 3
4 5 6
7 8 9
3 3
1
2 3 4
5 6 7
8 9 10
3 3
12
2 3 4
5 6 7
8 9 10
样例输出:
Yes
No
No

分析:

  选取最左下角的数字与要查找的数字比较,如果左下角的数字大于查找的数字,则表示最下面的一行都是大于要查找的数字的,所以可以将最下面一行去掉==》row--,相反如果左下角的数字小于查找的数字,那么第一列的数字都会被要查找的数字小,所以可以将第一列的数字去掉==》column++,直到找到要查找的数字,或者row<0或者column>columns。只能从左下角或者右上角开始,因为如果选择左上角,并不能够判断出是row--,还是column++。

代码:

package off002;

/**
 * @Title: Main.java
 * @Package: off002
 * @Description 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,
 *              每一列都按照从上到下递增的顺序排序。请完成一个函数,
 *              输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 
 * @author Han
 * @date 2016-4-13 下午5:17:34 
 * @version V1.0
 */
public class Main {
    
    public static void main(String[] args) {
        
        //for a example
        //rows = 3,column = 3,number = 2
        //arr 1 2 3
        //    4 5 6
        //    7 8 9
        //return true
        int[] arr = {3,3,0,1,2,3,4,5,6,7,8,9};
        int rows = arr[0];
        int columns = arr[1];
        int number = arr[2];
        
        if(find(arr, rows, columns, number)){
            
            System.out.println(true);
        }else{
            
            System.out.println(false);
        }
    }

    private static boolean find(int arr[], int rows, int columns, int number) {
        
        //find the lower left quarter first
        int row = rows - 1;
        int column = 0;
        
        //row < 0 and column = columns over the while and return false
        while(row >= 0 && column < columns){
            
            //find the number
            if(arr[row * columns + column] == number){
                
                return true;
            }else if(arr[row * columns + column] < number){
                
                column++;
            }else{
                
                row--;
            }
        }
        
        return false;
    }
}

 

 posted on 2016-04-13 17:43  韩思明  阅读(253)  评论(0编辑  收藏  举报