题目描述

在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
 
 
自己的思路实在是傻×了,先看下正确思路吧
 
把当前数字定位在第一行,最后一列。如果数字小则增大行,如果数字大则减小列!O(M+N)
bool Find3(vector<vector<int> > array,int target)
{
if(array.empty() && array[].empty())
return false; int r = , c = array[].size() - ;
while(r < array.size() && c >= )
{
if(array[r][c] == target)
return true;
else if(array[r][c] > target)
c--;
else
r++;
}
return false;
}

我自己二分查找的思路,每次扔掉一半O(log(MN)),超级繁琐,也AC了

bool Find(vector<vector<int> > array,int target) {
if(array.empty() && array[].empty())
return false; //用四个变量标记剩余的查找范围
int cleft = , cright = array[].size() - ;
int rup = , rdown = array.size() - ;
int l, r, u, d; while(cleft <= cright && rup <= rdown)
{
//对限定区域的第一行进行二分查找,定位刚好小于target值的列
l = cleft, r = cright;
if(array[rup][l] > target) //所有的都大于target
return false;
else
{
while(l <= r)
{
int m = l + (r - l) / ;
if(array[rup][m] == target)
return true;
else if(array[rup][m] < target)
l = m + ;
else
r = m - ;
}
cright = r;
} //对限定区域的第一列进行二分查找,定位刚好小于target值的行
u = rup, d = rdown;
if(array[u][cleft] > target) //所有的都大于target
return false;
else
{
while(u <= d)
{
int m = u + (d - u) / ;
if(array[m][cleft] == target)
return true;
else if(array[m][cleft] < target)
u = m + ;
else
d = m - ;
}
rdown = d;
} //对限定区域的最后一行进行二分查找,定位刚好大于target值的列
l = cleft, r = cright;
if(array[rdown][r] < target) //所有的都小于target
return false;
else
{
while(l <= r)
{
int m = l + (r - l) / ;
if(array[rdown][m] == target)
return true;
else if(array[rdown][m] < target)
l = m + ;
else
r = m - ;
}
cleft = l;
} //对限定区域的最后一列查找,定位刚好大于target值的行
u = rup, d = rdown;
if(array[d][cright] < target) //所有的都小于target
return false;
else
{
while(u <= d)
{
int m = u + (d - u) / ;
if(array[m][cright] == target)
return true;
else if(array[m][cright] < target)
u = m + ;
else
d = m - ;
}
rup = u;
}
} return false; //没找到
}

【剑指offer】二维数组中的查找☆的更多相关文章

  1. (java)剑指offer二维数组中的查找

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

  2. 剑指Offer 二维数组中的查找

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

  3. 剑指Offer——二维数组中的查找

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

  4. 剑指offer—二维数组中的查找

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

  5. 用js刷剑指offer(二维数组中的查找)

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

  6. 牛客网-剑指Offer 二维数组中的查找

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

  7. 剑指Offer_4_二维数组中的查找

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

  8. 面试题5-[剑指offer] 二维数组中的查找

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

  9. 剑指offer--1.二维数组中的查找

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

  10. C#版剑指Offer-001二维数组中的查找

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

随机推荐

  1. 虚拟主机的搭建(ubuntu+apache2)

    搭建环境:windows+VMware(Ubuntu)+apache2.(同一IP,不同域名) 1:在VMware的虚拟机Ubuntu下安装apache2(怎么安装百度一下就能找到): 2: apac ...

  2. 关于debug

    2019-04-05  11:18:15 1. debug 需巧用两个工具 1.1  用‘#’把感觉会出错的代码段注释掉 多行注释有两种快捷操作: 在需要注释的多行代码块前后加一组三引号''' 选中代 ...

  3. POJ3436------ACM Computer Factory

    题目链接 ACM Computer Factory Description As you know, all the computers used for ACM contests must be i ...

  4. Scrapy的架构与原理的理解【转】

    Scrapy 框架 Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页 ...

  5. Go语言之并发编程(一)

    轻量级线程(goroutine) 在编写socket网络程序时,需要提前准备一个线程池为每一个socket的收发包分配一个线程.开发人员需要在线程数量和CPU数量间建立一个对应关系,以保证每个任务能及 ...

  6. logback mybatis 打印sql语句

    logbac.xml 文件的基础配置参考的园友的 http://www.cnblogs.com/yuanermen/archive/2012/02/13/2349609.html 然后hibernat ...

  7. 虚拟架构就绪 | 谈谈Windows Server 2012 R2迁移这件小事

    我们所说的“新选择”包括操作系统升级——告别Windows Server 2003或2008,选择用什么样的姿势进行升级呢? 新年伊始,正是企业对自身IT基础设施进行评估的最佳时期.在多项评估项目里面 ...

  8. HDU5862 Counting Intersections

    Given some segments which are paralleled to the coordinate axis. You need to count the number of the ...

  9. rpm包管理 命令

    rpm -ivh package.rpmrpm -ivh --force  package_name.rpm # ...conflict with...rpm -ivh --nodeps packag ...

  10. struts OGNL详解

    首先了解下OGNL的概念: OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的 ...