二维数组中的查找

原创 2018年04月16日 00:14:40

写在前面:

牛客网剑指offer的日记文。算法总结是参考牛客网评论后自己的理解与整理。萌新会尽量著明引用出处,侵权必删。

题目描述:

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

题目理解:

二维数组查找题。暴力求解最坏时间复杂度:O(n^2)。可以考虑剪枝、二分(查找题万年王道)。

下面介绍O(n)解法:

选取右上(左下)为初始点,逐步向左下(右上)靠拢。(保证当前点的移动无歧义)

以右上为例row = 0, col = n。若target < array[row][col],col --,反之,row ++。

class Solution {
public:
    bool Find(int target, vector<vector<int> > array) {
        int row = 0, col = array[0].size() - 1;
        while(row < array.size() && col >= 0){
            if(target == array[row][col]) return 1;
            else if(target < array[row][col]) col --;
            else row ++;
        }
        return 0;
    }
};

下面介绍二分解法:

遍历行,在行中使用二分查询。

class Solution {
public:
    bool Find(int target, vector<vector<int> > array) {
        for(int i = 0; i < array.size(); i ++){
            int low = 0, high = array[i].size() - 1, mid;
            while(low <= high){
                mid = (low + high) / 2;
                if(array[i][mid] == target) return 1;
                else if(array[i][mid] > target) high = mid - 1;
                else low = mid + 1;
            }
        }
        return 0;
    }
};

总结:二分查找

bool BinarySearch(int target,vector<int> v){
	int low = 0, high = v.size(), mid;
	while(low <= high){
		mid = (low + high) / 2;
		if(v[mid] == target) return true;
		else if(v[mid] < target) low = mid + 1;
		else high = mid - 1;
	}
	return false;
}

从二维数组中查找某个元素

题目:有一个二维数组,二维数组的每一行从左到右数据递增,二维数组的每一列,从上到下递增。在这样的二维数组中查找指定元素,返回其下标。 思路:首先将待查找的元素q与二维数组的右上方的元素e进行...
  • xiaoyi357
  • xiaoyi357
  • 2017-04-08 18:53:24
  • 1209

在二维数组中查找元素

在二维数组中查找元素
  • StoryMonster
  • StoryMonster
  • 2016-10-05 16:58:50
  • 1794

二维数组中的查找(LeetCode: 74. Search a 2D Matrix)

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

2.二维数组中的查找(python和java实现)

题目:在一个二维数组中,每一行都是按照从左到右递增的顺序排序,每一列都是安装从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中书否含有该整数。...
  • john_bh
  • john_bh
  • 2017-03-08 16:35:52
  • 254

二维数组中的查找 C++

题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 代码:class Solu...
  • noc_lemontree
  • noc_lemontree
  • 2016-07-11 16:31:45
  • 710

[Java]二维数组中的查找

题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。《剑指offer面试题3》 ...
  • liqiang1251976772
  • liqiang1251976772
  • 2016-05-09 23:27:42
  • 1601

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

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

【C++】二维数组中的查找

一个二维数组,每一行右边的都比左边的大,每一列下面的都比上面的大。 完成一个函数,输入这样一个二维数组和一个整数,判断数组中是否含有该整数 先从一般的情况推导: 例如要在下面的数组中查找7 1...
  • michellechouu
  • michellechouu
  • 2015-08-06 13:48:03
  • 828

二维数组中的查找(C语言)

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

二维数组中某一元素的查找

/* 面试例题3:二维数组中某一元素的查找 :在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。 请完成一个函数,输入这样的一个二维数组和一个整数,...
  • liyf__88
  • liyf__88
  • 2017-05-19 16:32:34
  • 519
收藏助手
不良信息举报
您举报文章:二维数组中的查找
举报原因:
原因补充:

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