• 二维数组中的查找Java实现[剑指offer]


    题目

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

    1以矩形来查找

    1.1描述

    将二维数组画成矩形,然后从数组中选取一个数字,分3中情况来分析查找的过程,时间复杂度o(n*m),空间复杂度o(1)

    1.2code

     1 public class ArrayFind {
     2     private static int[][] A;
     3  
     4     private static int[][] initArray() {
     5         int[][] A = { { 1, 2, 8, 9 }, { 2, 4, 9, 12 }, { 4, 7, 10, 13 },
     6                 { 6, 8, 11, 15 } };
     7         return A;
     8     }
     9  
    10     private static void find(int target) {
    11         boolean found=false;
    12         if (A != null) {
    13             int row =0;
    14             int column = A[0].length-1;
    15             int key;
    16             while (row < A.length && column >= 0) {
    17                 key = A[row][column];
    18                 System.out.println("now key="+key);
    19                 if (key == target) {
    20                     found=true;
    21                     break;
    22                 } else if (key < target) {
    23                     ++row;
    24                 } else {
    25                     --column;
    26                 }
    27             }
    28             if(found){
    29                 System.out.println("find the targe "+target+" in :" + row + ","
    30                         + column + "!");
    31             }
    32             else{
    33                 System.out.println("Sorry not found!");
    34             }
    35         }
    36  
    37     }
    38  
    39     public static void main(String[] args) {
    40         // TODO Auto-generated method stub
    41         A=initArray();
    42         find(14);
    43         
    44  
    45     }
    46  
    47 }
    48 
    49 ————————————————
    50 版权声明:本文为CSDN博主「暮光_」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    51 原文链接:https://blog.csdn.net/u012091092/article/details/45849445

    2寻找普遍规律

    2.1描述

    从最后一列开始往回查找,每一列的第一行是该列的最小值,若目标值小于该列第一行,则其小于这一列的所有数字;找到大于等于目标值的该列数并记录col;

    从第一行的第col列开始每行查找,每行的第col列是当前行的最大值,找到目标值小于等于第col列的数,记录下行数row;

    在row~array.length行和0~col列之间的进行查找对应值即可;时间复杂度是o(n+m),空间复杂度是o(1)

    2.2code

     1  public boolean Find(int target, int [][] array) {
     2         //0.判空
     3         if(array==null||array.length==0||array[0].length==0){
     4             return false;
     5         }
     6         //1.先按照列进行判断,将target与第一行每一列的元素进行比较
     7         //第一行每一列的元素是每一列最小的
     8         int col=0;
     9         for(int i=array[0].length-1;i>=0;i--){
    10             if(target>=array[1][i]){
    11                 col=i;
    12                 break;
    13             }
    14         }
    15         //2.按照行进行判断,将target与第col列每一行进行比较
    16         //第col列每一行是该行最大的
    17         int row=0;
    18         for(int i=0;i<array.length;i++){
    19             if(target>=array[col][i]){
    20                 row=i;
    21                 break;
    22             }
    23         }
    24         //3.target就处于0~col和row到array.length之间
    25         for(int i=row;i<array.length;i++){
    26             for (int j=0;j<=col;j++){
    27                 if(array[i][j]==target){
    28                     return true;
    29                 }
    30             }
    31         }
    32         return false;
    33     }
  • 相关阅读:
    使用Java ImageIO类进行批量图片格式转换(转载)
    ORA00980 同义词转换不再有效(ORA00980: synonym translation is no longer valid) (转)
    如何截取字符串
    不能执行已释放 script 的代码(个人碰到的问题)
    查询某个用户下的表
    js验证密码强度
    查看表空间的sql语句
    JavaScript变量提升、作用域
    PL/SQL developer 显示所有数据
    js只能输入数字,小数点(整理)
  • 原文地址:https://www.cnblogs.com/ERFishing/p/11831199.html
Copyright © 2020-2023  润新知