《剑指offer》面试题3:二维数组中的查找
面试题3:二维数组中的查找
面试题3:二维数组中的查找题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的个二维数组和一个整数,判断数组中是否含有该整数。
例如下面的二维数组就是每行、每列都递增排序。如果在这个数组中查找数字7,则返回true;如果查找数字5,由于数组不含有该数字,则返 false。
| 1 | 2 | 8 | 9 |
|---|---|---|---|
| 2 | 4 | 9 | 12 |
| 4 | 7 | 10 | 13 |
| 6 | 8 | 11 | 15 |
对于我们要找的数字,比如7,我们可以从右上角或者从左下角开始找。过程如下:

从右上角寻找:
- 如果 a[i][j] 比目标数大,则,向左侧寻找
- 9 > 7 —> 8 > 7
- 如果 a[i][j] 比目标数小,则,在下侧寻找
- 2 < 7 —> 4 < 7
- 如果 a[i][j] 等于目标数,则,查找成功
- 7 == 7
- 如果遍历完(行或列超出数组下标),没有该数
从左下角寻找:
- 如果 a[i][j] 比目标数大,则,向上侧寻找
- 如果 a[i][j] 比目标数小,则,在右侧寻找
- 如果遍历完(行或列超出数组下标),没有该数
//从右上角开始查找
bool Find(int *arr, int rows, int columns, int number)
{
for (int i = 0, j = columns - 1; i > rows, j >= 0;)
{
if (arr[i * columns + j] == number)
{
cout << "arr" << '[' << i << ']' << '[' << j << ']' << '=' << number << endl;
return true;
}
if (arr[i * columns + j] > number) //a[i][j]
{
--j;
}
else if (arr[i * columns + j] < number)
{
++i;
}
}
return false;
}
测试:
int main()
{
int arr[4][4] = { {1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15} };
int flg = Find((int *)arr, sizeof(arr[0]) / sizeof(int), sizeof(arr) / sizeof(arr[0]),4);
if (!flg) cout << "查找失败" << endl;
}
测试结果:

《剑指offer》面试题3:二维数组中的查找的更多相关文章
- 剑指offer面试题3 二维数组中的查找(c)
剑指offer面试题三:
- 剑指offer面试题3二维数组中的查找
题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 需要与面试官确认的是,这 ...
- 剑指offer面试题4: 二维数组中的查找
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...
- 剑指offer面试题3 二维数组中的查找 (java)
注:java主要可以利用字符串的length方法求出长度解决这个问题带来方便 public class FindNum { public static void main(String[] args) ...
- 剑指Offer - 九度1384 - 二维数组中的查找
剑指Offer - 九度1384 - 二维数组中的查找2013-11-23 23:23 题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个 ...
- 剑指offer【01】- 二维数组中的查找(Java)
在经历了春招各大公司的笔试题和面试官的血虐之后,决定要刷一些算法题了,不然连面试机会都没有. 而应对笔试和面试,比较出名的就是剑指offer的题目和LeetCode的题目了.剑指offer应对面试中的 ...
- 剑指offer第二版-4.二维数组中的查找
面试题4:二维数组中的查找 题目要求: 一个二维数组中,每一行从左到右递增,每一列从上到下递增.输入一个整数,判断数组中是否含有该整数 /** * @since 2019年2月13日 下午5:08:5 ...
- 剑指Offer编程题1——二维数组中的查找
剑指Offer编程题1---------------二维数组中的查找 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完 ...
- 【剑指Offer】1、二维数组中的查找
题目描述: 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否 ...
- 剑指offer(3)——二维数组中的查找
题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 思路: 首先选取数组中右上 ...
随机推荐
- Hive复杂数组字典(Json-Array)解析
数据存储字段格式如下(Json-Array互相嵌套): string='{"id":"9088848902695992720","title" ...
- 如何在shell脚本里使用sftp批量传送文件(二)
原文链接:http://bbs.chinaunix.net/archiver/tid-508290.html 主要步骤如下: 1.为运行shell脚本的本地用户生成密钥对2.将其中的公钥分发到sftp ...
- Mono创始人 Miguel de Icaza今天离开微软
2016年,微软突然宣布收购移动工具开发商Xamarin,后者是位于美国加利福尼亚,据称微软收购Xamarin交易价格在4亿到5亿美元之间.因此,微软获得了著名的开源倡导者和开发人员Miguel de ...
- 哈工大 计算机系统 实验一 Linux下C工具应用
所有实验文件可见github 计算机系统实验整理 实验报告 实 验(一) 题 目 Linux下C工具应用 专 业 计算机学院 学 号 班 级 学 生 指 导 教 师 实 验 地 点 实 验 日 期 计 ...
- laravel 7 H-ui模板ajax批删
1,HTML页面写一个button按钮 <a href="javascript:;" onclick="deleteAll()" class=" ...
- 变量、变量作用域、常量final、变量的命名规范
变量 变量是什么:就是可以变化的量! Java是一种强类型语言,每个变量都必须声明其类型. Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域. 注意事项: 每个变量都有类型,类 ...
- VTK数据拓扑结构、几何结构和属性数据
读取到VTK数据后,将数据组织起来并添加属性值. 示例: #include <vtkSmartPointer.h> #include <vtkPoints.h> #includ ...
- SWAKS伪造邮件发送
一.SWAKS介绍 swaks(SWiss Army Knife Smtp)SMTP瑞士军刀Swaks是由John Jetmore编写和维护的一种功能强大,灵活,可脚本化,面向事务的SMTP测试工具. ...
- Redis运维实战之集群中的脑裂
1.对于分布式Redis主从集群来说,什么是脑裂? 所谓的脑裂,就是指在主从集群中,同时有两个主节点,它们都能接收写请求.而脑裂最直接的影响,就是客户端不知道应该往哪个主节点写入数据,结果就是不同的客 ...
- 关于MVC WebAPI 中加入任务调度功能的问题 (MVC WebAPI 任务调度)
在MVC WebAPI中加入任务调度功能.即在MVC WebAPI启动时,启用任务调度程序. 但是这里有一个问题点,就是部署好IIS站点后,发现任务调度并没有启用.原因为何? 原因是部署好IIS站点后 ...