【剑指offer】面试题 4.二维数组中的查找

面试题 4. 二维数组中的查找

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

举例

    例如下面的二维数组就是每行、每列都递增排列。如果在这个数组中查找数字7,则返回true;如果查找数字5,由于
数组不含有该数字,则返回false。
1    2     8     9
2    4     9    12
4    7    10    13
6    8    11    15

复杂度:O(M + N) + O(1)

代码实现

public class Solution {
        public boolean Find(int target, int [][] array) {
            if(array==null||array.length==0||array[0].length==0)
                return false;
            int row = array.length,col = array[0].length;
            int r = 0,c = col - 1;
            while(r<=row-1&&c>=0){
                if(target==array[r][c]){
                    return true;
                }else if(target>array[r][c]){
                    r++;
                }else{
                    c--;
                }
            }
            return false;
        }
}

原文地址:https://www.cnblogs.com/hglibin/p/9029298.html

时间: 2024-08-11 22:51:23

【剑指offer】面试题 4.二维数组中的查找的相关文章

【剑指Offer面试题】二维数组中的查找

下决心AC所有剑指offer面试题. 九度OJ面试题地址:http://ac.jobdu.com/hhtproblems.php 书籍:何海涛--<剑指Offer:名企面试官精讲典型编程题> 对于面试题,面试官往往更希望我们能提出优化方法,这样更能体现我们的思维能力以及传说中的"内功".所以做剑指offer要着重训练这方面,多总结多细究,总是有好处的.加油~ 二维数组中的查找 时间限制:1 秒内存限制:32 兆 特殊判题:否提交:19005解决:3642 题目描述: 在一个

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

面试题: 二维数组中的查找 /* 题目:   在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成 一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该数. */ ps:(其实前段时间我就做过这道题,今天看到了,觉得还是有点生,那就再来一次吧) 题目分析:  在分析这个问题的时候,我们首先要看,在一个二维数组中查找一个数字是否存在,那么很多人就觉得 简单了,遍历二维数组与所需要查找的数字进行比较不就完了!  不可否认的是你说的是可行的,可是

剑指 offer 第一题: 二维数组中的查找

打算写 图解剑指 offer 66 题 的系列文章,不知道大家有没有兴趣 ?? 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 题目分析 图 1 如果没有头绪的话,很显然使用 暴力解法 是完全可以解决该问题的. 即遍历二维数组中的每一个元素,时间复杂度:O(n^2). 其实到这里我们就可以发现,使用这种暴力解法并没有充分利用题目给出的信息.这

剑指offer系列源码--二维数组中的查找

题目1384:二维数组中的查找 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:14827 解决:2888 题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 输入: 输入可能包含多个测试样例,对于每个测试案例, 输入的第一行为两个整数m和n(1<=m,n<=1000):代表将要输入的矩阵的行数和列数. 输入的第二行包括一个整数t(1<=t<=1

剑指offer_面试题3_二维数组中的查找(简单问题亦不能忽视)

题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样一个二维数组和一个整数,判断数组中是否含有该整数. 数组如下: 在该数组中查找一个整数隐含的几个规律: 1.在数组中选取一个数,如果与所查目标相等,那么查找结束 2.若所选数字,小于,要查找的目标,则要查找的目标应该在当前选取的位置的右边或者下边 3.若所选数字,大于,要查找的目标,则要查找的目标应该在当前选取的位置的左边或者上边 问题关键如何在该数组中选取整数? 答:在一行中,

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

题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 思路: 首先选取数组中右上角的数,然后让该数(num1)和待查找的数(num2)进行比较,如果num1比num2小,那么接下来只能向下继续查找,行数加1,如果num1比num2大,那么接下来应该将列数减1,继续查找,直到整个数组遍历完成 代码: 1 public boolean findNum(int[][] arr,int

剑指offer第一题:二维数组中的查找

题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 菜鸡解法...O(nlogm) 1 public class Solution { 2 public boolean Find(int target, int [][] array) { 3 int row = array.length;//二维数组行数 4 int col = array[0].l

剑指Offers 题目1384:二维数组中的查找

题目1384:二维数组中的查找 题解报告:一道典型的二分查找题,用C++做居然超时>1000MS,郁闷半天!,该成C,提交680MS过,C还是很快的! #include <stdio.h> #include <stdlib.h> int a[1010][1010]; int main() { int m, n, t; int flag; while(scanf("%d%d", &m, &n) !=EOF){ scanf("%d&q

《剑指Offer》面试题:二维数组中的查找

题目 题目:在一个二维数组中,每一行都按照从左到右的顺序进行了排序,每一列都按照从上到下进行了排序. 输入这样的一个二维数组arr和一个整数k,判断数组中是否存在这个数. 思路 由于数组时有序的这样一个前提,因此 从右上角开始查找 :如果要查找的数比右上角的值大,则查找范围删除掉(并不是实际的删除,只需要改变下标即可)这一行,如果要查找的数比右上角的值小,则查找范围删除掉这一列:这样就可以将查找范围逐渐缩小,直至完成搜索 当然也可以从右下角开始查找,但是不可以从左上角或者是左下角开始查找(因为这