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

    问题描述:给定一个二维整数数组,其中每一行从小到大排列,每一列也是从小到大排列,给定一个整数,判断该数是否在该数组中。

    分析:对于干问题,最简答的方法就是穷举了,但是时间复杂度太高了,这时我们可以使用这个矩阵数组的特点来解决。

    每行和每列元素都是从小到大排列,可以利用这个性质,我们可以从右上角或者左下角开始进行比较,也就是用反对角线上的元素进行比较,以右上角为例:

            1.如果该数大于右上角元素,则可以排除右上角元素所在的列,下次向左搜索;

            2. 如果该数小于右上角元素,则可以排除右上角元素所在的行,下次向下搜索;

            3.如果该数等于右上角元素,则可以直接返回结果。

           具体的Java代码如下,写法比较通用,读者可以很容易转换为其他语言实现。

         

     1 public class Main {
     2     public static boolean search(int a[][],int p){
     3         boolean flag=false;
     4         if(a==null)return flag;                    //如果是空数组则返回false
     5         int n1=a.length-1,n2=a[0].length-1;        //求出第一维和第二维的长度
     6         int i=0,j=n2;
     7         while(i<=n1 && j>=0){
     8             if(a[i][j]>p)j--;                      //删除列
     9             else if(a[i][j]<p)i++;                 //删除行
    10             else  {flag=true;break;}               //找到元素
    11         }
    12         return flag;
    13     }
    14     public static void main(String[] args) {
    15         // TODO 自动生成的方法存根
    16         int a[][]={{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};
    17         int p=8;
    18         System.out.println(search(a,p));
    19     }
    20 
    21 }

    输出结果为:

    true

  • 相关阅读:
    测试开发面试集锦_数据库
    测试开发面试集锦_linux
    测试开发面试题集锦_java
    Java中equals 和==的区别
    定时清理文件shell脚本
    java文件上传,upload使用
    python 获取错误日志,并发送邮件
    c语言代码审计规范
    渗透测试之nmap
    渗透测试之GoogleHack
  • 原文地址:https://www.cnblogs.com/guozhenqiang/p/5461733.html
Copyright © 2011-2022 走看看