【剑指offer】二维数组中的查找☆
题目描述
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】二维数组中的查找☆的更多相关文章
- (java)剑指offer二维数组中的查找
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从 上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. pu ...
- 剑指Offer 二维数组中的查找
题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路法一: * 矩阵是 ...
- 剑指Offer——二维数组中的查找
题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 分析: 因为二维数组 ...
- 剑指offer—二维数组中的查找
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...
- 用js刷剑指offer(二维数组中的查找)
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...
- 牛客网-剑指Offer 二维数组中的查找
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...
- 剑指Offer_4_二维数组中的查找
题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. ...
- 面试题5-[剑指offer] 二维数组中的查找
题目 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. ...
- 剑指offer--1.二维数组中的查找
题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. ...
- C#版剑指Offer-001二维数组中的查找
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...
随机推荐
- 引用 Reference
在Java中,判断一个对象是否 "存活" ,都和引用有关,当一个对象没有任何的引用指向它,我们可以认为这个对象可以被GC了. 引用如何定义?Object obj = new Obj ...
- [Python]有关pygame库中的flip和update的区别
pygame.display.flip()和pygame.display.update()的用法上的区别: 资料一. 资料二. (资料最后更新时间:2019年1月9日)
- 学习python第四天 列表
模块的导入是使用 import sys#导入模块sysprint(sys.path)#打印环境变量,可能存在的目录print(sys.argv)#打印脚本的名字,相对路径 import os os.s ...
- unix gcc编译过程
gcc编译过程 现代编译器常见的编译过程: 源文件-->预处理-->编译/优化-->汇编-->链接-->可执行文件 对于gcc而言: 第一步 预处理 命令: ...
- BFS:HDU3085-Nightmare Ⅱ(双向BFS)
Nightmare Ⅱ Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- vba中获取当前sheet页的名称,当前单元格所在位置
fname = ActiveSheet.Name-------获取当前sheet页的名称 Sname = "" & fname & "&qu ...
- R语言分析朝阳医院数据
R语言分析朝阳医院数据 本次实践通过分析朝阳医院2016年销售数据,得出“月均消费次数”.“月均消费金额”.“客单价”.“消费趋势”等结果,并据此作出可视化图形. 一.读取数据: library(op ...
- Spring Boot 学习系列(03)—jar or war,做出你的选择
此文已由作者易国强授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 两种打包方式 采用Spring Boot框架来构建项目,我们对项目的打包有两种方式可供选择,一种仍保持原有的 ...
- 55、android app借助友盟实现微信授权登录
一.去微信开放平台的管理中心申请移动设备的审核(需进行开发者资质认证,每年300元) 1.获取应用的签名 2.在微信开放平台申请移动应用 两个注意点:①签名要填对 ②应用的包名要写对(tips: co ...
- PostgreSQL查看索引的使用情况
查看某个表的索引使用情况 select relname, indexrelname, idx_scan, idx_tup_read, idx_tup_fetch from pg_stat_user_i ...