剑指Offer面试题目:有序二维数组的查找
来源:互联网 发布:抽象工厂模式特点java 编辑:程序博客网 时间:2024/04/28 19:52
描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解法:先找右上角的元素,若右上角的元素和要查找的元素值相同,则返回true;如果右上角的元素比要查找的元素小,则剔除右上角元素所在的行;如果比要查找的元素大,则剔除右上角元素所在的列。
代码:
#include<iostream>#include<vector>using namespace std;class Solution {public:bool Find() {if (array.empty()){return false;}int row = array.size();int col = array[0].size();int topRight_row = 0;int topRight_col = col-1;while (topRight_row < row && topRight_col >= 0){if (array[topRight_row][topRight_col] == target){cout << "YES" << endl;return true;}else if (array[topRight_row][topRight_col] > target){--topRight_col;}else++topRight_row;}cout << "NO" << endl;return false;}Solution(vector<vector<int> > array, int target){this->array = array;this->target = target;}private:vector<vector<int> > array;int target;};int main(){vector<vector<int> > array(4, vector<int>(4,1));vector<int> v0,v1,v2,v3;v0.push_back(1); v0.push_back(2); v0.push_back(8); v0.push_back(9);v1.push_back(2); v1.push_back(4); v1.push_back(9); v1.push_back(12);v2.push_back(4); v2.push_back(7); v2.push_back(10); v2.push_back(13);v3.push_back(6); v3.push_back(8); v3.push_back(11); v3.push_back(15);array.clear();array.push_back(v0);array.push_back(v1);array.push_back(v2);array.push_back(v3);output2Dvector(array);Solution st(array,5);st.Find();return 0;}分析:在这个查找过程中,不能选择左上及右下,这样无法剔除行与列,但可以选择左下(这点很容易理解)。
由于每次查找过程中都会剔除一行或一列,所以时间复杂度为O(max(N,M)).而按行列逐个查找的复杂度为O(N*M)
0 0
- 剑指Offer面试题目:有序二维数组的查找
- 《剑指offer系列》面试题目3:二维数组中的查找
- 【剑指offer】有序二维数组中的查找
- 剑指offer 二维有序数组查找
- 《剑指offer》:行列有序的二维数组查找()
- 二维有序数组中的查找 剑指offer 01
- 【剑指Offer面试编程题】题目1384:二维数组中的查找--九度OJ
- 【剑指Offer面试编程题】题目1384:二维数组中的查找--九度OJ
- 剑指Offer面试题目第3题-二维数组中的查找
- 牛客网 - 剑指Offer - 考点:数组 题目:二维数组中的查找
- 剑指offer第3题——>有序二维数组的查找
- 有序二维数组的查找
- 有序二维数组的查找
- 《剑指Offer》面试题3:二维数组中的查找(行列分别有序数组的二分查找)
- 【剑指offer】【二维数组中的查找】【有序二维数组整数查找】【判断二维数组是否为空方法】
- 剑指offer题目3-二维数组中的查找(JAVA实现)
- 剑指offer - 二维数组的查找
- 剑指offer—二维数组的查找
- Hello, Android 深入(一)
- linux下如何实现mysql数据库每天自动备份定时备份
- 大数据处理Hadoop学习文章
- hdu 5468 Puzzled Elena(前缀性质+dfs序+容斥)
- 使用Ant打包java程序(讲解详细)
- 剑指Offer面试题目:有序二维数组的查找
- Apriori算法详解之【一、相关概念和核心步骤】
- Linux I2C 驱动分析(一)
- Linux下socket优化
- Linux上扩展磁盘空间
- 黑马程序员—static和extern及文件操作和字符读写
- CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换
- Android 的ThreadLocal 详解
- 玩转CPU Topology