java二维数组查找

java二维数组查找问题:在一个二维数组中,每行每列都递增排序,在这个数组中查找一个数字,如果存在返回true,否则返回flase。分析:数组查找一直都是初学java的同学的热门考点,关于查找主要有顺序查找、二分查找、哈希表查找、二叉排序树查找。我们看下下面这个数组,数组满足每行每列都是递增顺序。在这个数组中查找某个数,如果存在,返回true和所在位置。否则返回flase。这里我们该选择什么样的方式来…

大家好,又见面了,我是你们的朋友全栈君。

问题:在一个二维数组中,每行每列都递增排序,在这个数组中查找一个数字,如果存在返回true,否则返回flase。

分析:数组查找一直都是初学java的同学的热门考点,关于查找主要有顺序查找、二分查找、哈希表查找、二叉排序树查找。

我们看下下面这个数组,数组满足每行每列都是递增顺序。在这个数组中查找某个数,如果存在,返回true和所在位置。否则返回flase。

java二维数组查找

这里我们该选择什么样的方式来查找呢,首先排除顺序查找,顺序查找是大部分人都应该会的,这里不需要做太多介绍。

然后通过数组特性分析,一个排序好的数组,我们首先考虑二分法,如果数组中选取的数字和要查找的数字相等时,查找结束。如果选取的数字大于要查找的数字。那么根据数组要求,所查找数字位于选取数字的左边和上边(图)。反之就是在右边或下边(图2)

java二维数组查找    java二维数组查找

可以看到,这样方法中,由于要查找的数字相对于当前选取的位置有可能在两个区域中出现,而且这两个区域还有重叠的部分,这样问题看起来就复杂了,于是很多人卡住这里束手无策。为什么会遇到这种难题呢,是因为我们选取的数是二维数组中间的数字。如果我们从数组的一个角上来选取一个数会不会变得简单点呢?还是上图的例子。我们来看一下。首先我们选取数组右上角的9,有三种情况:
    1)要查找的数等于9,查找结束。

    2) 要查找的数字大于9,那么9所在的这一行就可以排除了,因为从这个数组的特征可以看到9就是这一行的最大数。最大数都小于要查找的数字,那这一行当然不可能等于要查找的数。所查找的数字在剩下的区域(图3)。

    3)要查找的数小于9,那么9所在的这一列可以排除,因为9所在这一列中9是最小的数字。同理,查找的数字在剩下的区域(图4)。

java二维数组查找java二维数组查找

通过上一步。我们可以得到一个新的4×3或者3×4的数组。对新的数组继续执行上述步骤。直到数组变为0x0。即表明数组中没有我们要查找的数字。以上就是我们的思路。具体代码实现如下:

package array;
public class FindInPartiallySortedMatrix {
    private int row, col;
    private boolean isFind;
    public FindInPartiallySortedMatrix Find(int[][] a,int find){
        int rows = a.length-1,cols = a[0].length-1,firstrows = 0;
        if(rows<=0||cols<=0){
            System.out.println("数组为空,无任何数据");
        }
        else{
            isFind = false;
            while (firstrows<=rows&&cols>=0){
                if(a[firstrows][cols]>find){
                    --cols;
                }
                else if(a[firstrows][cols]<find){
                    ++firstrows;
                }
                else {
                    this.row = firstrows;
                    this.col = cols;
                    this.isFind = true;
                    break;
                }
            }
        }
            System.out.println(this.isFind + " " + this.row + " " + this.col);
        return this;
    }
  public static void main(String[] args){
      int[][] a ={
  
  {1,2,8,4},{2,4,9,12},{4,7,10,13},{6,8,11,15}};
      FindInPartiallySortedMatrix finds = new FindInPartiallySortedMatrix();
      finds.Find(a,1);
      finds.Find(a,7);
      finds.Find(a,13);
      finds.Find(a,15);
      finds.Find(a,3);
      //System.out.println(finds.isFind+" "+finds.row+" "+finds.col);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/138945.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 软件工程概论题库「建议收藏」

    一、选择题:1.开发软件所需高成本和产品的低质量之间有着尖锐的矛盾,这种现象称做(C)。A.软件工程 B.软件周期 C.软件危机 D.软件产生2.瀑布模型本质上是一种(A)模型。A.线性顺序B.顺序迭代C.线性迭代D.早期产品3.瀑布模型存在的问题是(B)。A.用户容易参与开发 B.缺乏灵活性C.用户与开发者易沟通D.适用可变需求4.螺旋模型是…

    2022年4月17日
    131
  • 机器学习:回归问题

    机器学习:回归问题回归,我第一次看到回归的时候,想的就是回归是什么意思?后来看了一个答案解释很有意思,回归这个词来自于生物学,在调查父母与子代身高问题的时候,发现父母如果过高的话,子女就会比父母矮一点,如果父母矮的话,

    2022年8月6日
    7
  • 在Pycharm中安装matplotlib

    在Pycharm中安装matplotlib 1.初学python——安装matplotlib在pycharm中安装第三库不需要下载:打开pycharm,点击fileàsettings2.选择Project:dataview(项目名字)àprojectInterpreterà点击+号 3.进入后,在输入框中输入matplotlib进行搜索,然后选中要安装的包并点击下方的installpackage…

    2022年6月17日
    41
  • 驱动程序vmci.sys版本不正确。请尝试重新安装 VMware

    驱动程序vmci.sys版本不正确。请尝试重新安装 VMware

    2022年2月22日
    21
  • Byte数组转byte数组_java object对象转数组

    Byte数组转byte数组_java object对象转数组这里用到了java对象的序列化,即要求要转换成Byte数组的对象必须是可序列化的。java代码如下:/***对象转Byte数组**@paramobj*@return*@throwsException*/publicstaticbyte[]objectToBytes(Objectobj)throwsException{logger.debug(“object

    2022年9月10日
    3
  • 什么是SpringApplication[通俗易懂]

    什么是SpringApplication[通俗易懂]SpringApplication什么是SpringApplication在spring的官方文档里面没有给出确切的定义,文档中说,SpringApplication是一个类,然后提供一些便利的功能来引导spring程序的启动,在main的方法里面启动likethis:…

    2022年9月10日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号