每天两道编程题---剑指offer(1):二维数组中的查找

原创 2018年04月16日 10:48:27

题目描述:

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

解题思路:

由于每一行、每一列都是递增的,所以显然arr[0][0]和arr[arr.length-1][arr[0].length-1]分别是最小的和最大的数。通过target与这两个数的比较可以轻松排除一部分情况。

这里需要注意的是对数组是否为空的判断,这是有时会遗漏的部分。

对剩下的满足条件的参数,可以对每一行进行遍历,将target与每一行的第一个数和最后一个数比较,确定target是否在这一行中。如果在,则可使用折半查询查出target是否存在;若不在则continue,进入下一个循环。

附上代码:

public class Solution {
    public boolean Find(int target, int [][] array) {
        if(array.length == 0 || array[0].length == 0){
            return false;
        }
        if(target < array[0][0] || target > array[array.length-1][array[0].length-1]){
            return false;
        }
        for(int i=0;i<array.length;i++){
            if(target >= array[i][0] && target <= array[i][array[0].length - 1]){
                for(int j=0;j<array[0].length;j++){
                    if(target == array[i][j]){
                        return true;
                    }
                }
            }else{
                continue;
            }
        }
        return false;
    }
}

性能结果:

运行时间:144ms,占用内存:18052K

优秀解法:

利用矩阵的有序性,以arr[x][y]为起点(x=arr.length-1,y=0),与target比较,如果比target大则x--,比target小则y++,如果出界则return false。这样可以大大减少空间复杂度,时间复杂度方面优势不大。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/czj970203/article/details/79957273

数据结构基础系列(8):查找

数据结构课程是计算机类专业的专业基础课程,在IT人才培养中,起着重要的作用。课程按照大学计算机类专业课程大纲的要求,安排教学内容,满足需要系统学习数据结构的人。系列课程包含11个部分,本课为第8部分查找,介绍查找的基本概念,重点是线性表上顺序查找、二分查找和分块查找,二叉排序树、AVL树和B-树的各种树表,以及哈希表查找。
  • 2015年11月16日 15:26

牛客在线编程(剑指offer)---二维数组中的查找

题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解题思路: 这个题目...
  • a1103000308
  • a1103000308
  • 2016-08-26 10:28:46
  • 380

JAVA实现二维数组中的查找(《剑指offer》)

最近在刷《剑指offer》里的编程题,但是网上关于《剑指offer》的解答多半是C或者C++的,而且官方(作者)也是在用C++进行讲解,这里自己用java写了一些题目的解答代码(当然也有部分是借鉴了网...
  • qq_15062527
  • qq_15062527
  • 2015-10-01 14:24:34
  • 1433

牛客网刷题---二维数组中的查找(剑指offer)

题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。  输入描述...
  • liu_sheng_1991
  • liu_sheng_1991
  • 2016-06-20 17:56:49
  • 1113

剑指offer算法 java实现 二维数组中的查找

题目: 在一个二维数组中,每一行都按照从左到右
  • believejava
  • believejava
  • 2014-08-16 14:33:31
  • 5682

剑指offer:二维数组中的查找(数组)

题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 分析: ...
  • fengsser
  • fengsser
  • 2015-06-29 10:12:17
  • 1672

剑指offer 算法题 python版 更新中

1.二维数组中的查找在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。# -*- c...
  • u013205877
  • u013205877
  • 2017-08-24 22:10:35
  • 346

剑指offer 面试题(二维数组中的查找) (2)

面试题: 二维数组中的查找    /* 题目:   在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成 一个函数,输入这样的一个二维数组和一个整数...
  • bitboss
  • bitboss
  • 2016-05-08 15:41:29
  • 707

剑指Offer编程题笔记之数组相关

这一篇是数组相关的题,这里记录了9题,可能记录的不完整。 数组相关的题,解法多样,效率也各不相同。第二次实现,做得也不流畅。另外,还有两题没做出来,分别是“数组中的逆序对”和“连续子数组的最大和”。...
  • weixin_30531261
  • weixin_30531261
  • 2018-02-02 15:06:25
  • 60

《剑指offer》——二维数组中的查找

T: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 Constraints...
  • shansusu
  • shansusu
  • 2015-11-01 20:56:53
  • 421
收藏助手
不良信息举报
您举报文章:每天两道编程题---剑指offer(1):二维数组中的查找
举报原因:
原因补充:

(最多只允许输入30个字)