zoukankan      html  css  js  c++  java
  • 二维数组中的查找

    题目描述:

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

    输入:

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

    输入的第一行为两个整数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;
        }
    }

     

  • 相关阅读:
    先建制度,后建系统
    历史即哲学
    要针对对方关心的问题开展有效的交流
    技术人员安身立命
    人工智能与信息爆炸
    50年100年后我们的计算结构(架构)是什么样的?
    关于“怎么看”的哲学思考
    c语言之秒数算法
    httpd centos7
    SSH隧道技术----端口转发,socket代理
  • 原文地址:https://www.cnblogs.com/a294098789/p/5388035.html
Copyright © 2011-2022 走看看