zoukankan      html  css  js  c++  java
  • 剑指offer编程题Java实现——面试题3二维数组中的查找

    题目描述

    在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
     
    下面是我实现的代码,修改下类名(Solution)和方法名(Find)通过了牛客网的测试用例
     1 public class No2Array{
     2     public static void main(String[] args){
     3         int[][] array={{1,2,8,9},
     4                     {2,4,9,12},
     5                     {4,7,10,13},
     6                     {6,8,11,15}};
     7         System.out.println(findByTheUpperRightCorner(5,array));
     8         System.out.println(findByTheLowerLeftCorner(7,array));
     9     }
    10     
    11     /*
    12      * 选取数组查找范围内的右上角的数字,如果该数字等于要查找的数字,则查找结束。
    13      * 如果该数字小于要查找的数字,则剔除该数字所在的行;
    14      * 如果该数字大于要查找的数字,则剔除该数字所在的列;
    15      */
    16     public static boolean findByTheUpperRightCorner(int target, int [][] array) {
    17         if(array.length>0){
    18             int    rows=array.length;
    19             int columns=array[0].length;
    20             int row=0;
    21             int column=columns-1;
    22             while(row<rows&&column>=0){
    23                 if(array[row][column]==target)
    24                     return true;
    25                 if(array[row][column]>target)
    26                     column--;
    27                 else
    28                     row++;
    29             }
    30             return false;
    31         }
    32         return false;
    33     }
    34     
    35     /*
    36      * 选取数组查找范围内的左下角的数字,如果该数字等于要查找的数字,则查找结束;
    37      * 如果该数字小于要查找的数字,则剔除该数字所在的列;
    38      * 如果该数字大于要查找的数字,则剔除该数字所在的行;
    39      */
    40     public static boolean findByTheLowerLeftCorner(int target,int[][] array){
    41         if(array.length>0){
    42             int rows=array.length;
    43             int columns=array[0].length;
    44             int row=rows-1;
    45             int column=0;
    46             while(row>=0&&column<columns){
    47                 if(array[row][column]==target)
    48                     return true;
    49                 if(array[row][column]<target)
    50                     column++;
    51                 else
    52                     row--;
    53             }
    54             return false;
    55         }
    56         return false;
    57     }
    58 }

    通过选取右上角和左上角的两种实现思路都给出了实现代码,明白其中一个原理另外一个也就很容易了。关键是不能选取左上角或者右下角的数组作为对比,比如选取左上角的数字小于查找的值,那么该数字的下面数字和右面数字都有可能是要查找的范围,这样无法缩小查找范围。所以只要知道从右上角或者左下角进行查找就很容易解决了。

  • 相关阅读:
    MySQL数据库操作(4)表约束
    通过C学Python(3)列表的常用方法
    MySQL数据库操作(2)基本操作
    通过C学Python(1)关于语言、数值类型和变量
    通过C学Python(2)序列类型
    MySQL数据库操作(1)用户与权限
    一个文章单词分析作业
    pyCharm的几个配置
    MySQL数据库操作(3)表结构操作
    shell脚本中的for循环和while循环
  • 原文地址:https://www.cnblogs.com/gl-developer/p/6431331.html
Copyright © 2011-2022 走看看