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

解题思路:
首先选取数组中右上角的数字。如果该数字等于要查找的数字,查找过程结束;如果该数字大于要查找的数字,剔除这个数字所在的列;如果该数字小于要查找的数字,剔除这个数字所在的行。

代码如下:
从矩阵的右上角开始找:

#include <iostream>
using namespace std;
const int N = 4;int a[4][N] = { {1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15} };bool Find(int(*p)[N], int rows, int cols, int num)
{bool flag = false;if (p != nullptr && rows > 0 && cols > 0){int row = 0;int col = cols - 1;while (row < rows && col >= 0){if ((*(*(p + row) + col))==num){flag = true;break;}else if ((*(*(p + row) + col)) > num) --col;else ++row;}}return flag;
}int main()
{if (Find(a, 4, 4, 13)) cout << "yes" << endl;else cout << "no" << endl;if (Find(a, 4, 4, 14))cout << "yes" << endl;else cout << "no" << endl;return 0;
}

代码如下:
从矩阵的左下角开始找:

#include <iostream>
using namespace std;
const int N = 4;int a[4][N] = { {1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15} };bool Find(int(*p)[N], int rows, int cols, int num)
{bool flag = false;if (p != nullptr && rows > 0 && cols > 0){int col = 0;int row = rows - 1;while (row >= 0 && col < cols){if ((*(*(p + row) + col)) == num){flag = true;break;}else if ((*(*(p + row) + col)) < num) ++col;else --row;}}return flag;
}int main()
{if (Find(a, 4, 4, 13)) cout << "yes" << endl;else cout << "no" << endl;if (Find(a, 4, 4, 14))cout << "yes" << endl;else cout << "no" << endl;return 0;
}

测试用例:
● 二维数组中包含查找的数字(查找的数字是数组中的最大值和最小值,查找的数字介于数组中的最大值和最小值之间)。
● 二维数组中没有查找的数字(查找的数字大于数组中的最大值,查找的数字小于数组中的最小值,查找的数字在数组的最大值和最小值之间但数组中没有这个数字)。
● 特殊输入测试(输入空指针)。
本题考点:
● 考查应聘者对二维数组的理解及编程能力。二维数组在内存中占据连续的空间。在内存中从上到下存储各行元素,在同一行中按照从左到右的顺序存储。因此我们可以根据行号和列号计算出相对于数组首地址的偏移量,从而找到对应的元素。
● 考查应聘者分析问题的能力。当应聘者发现问题比较复杂时,能不能通过具体的例子找出其中的规律,是能否解决这个问题的关键所在。这个题目只要从一个具体的二维数组的右上角开始分析,就能找到查找的规律,从而找到解决问题的突破口。

[剑指offer]面试题3:二维数组中的查找相关推荐

  1. 剑指Offer - 面试题4. 二维数组中的查找(双指针)

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

  2. 剑指offer面试题04. 二维数组中的查找(Array)

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

  3. 剑指offer刷题 04. 二维数组中的查找

    剑指 Offer 04. 二维数组中的查找 1. 问题描述 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个高效的函数,输入这样的一 ...

  4. 剑指offer刷题(java)|二维数组中的查找|替换空格|leetcode刷题

    文章目录 前言 一.二维数组中的查找 题目 题解一 题解二 题解三 二.替换空格 题目 题解一 题解二 题解三 前言 本文主要是写了我做算法题的思路以及对其他优秀题解的自我理解. 一.二维数组中的查找 ...

  5. 剑指offer 面试题3—二维数组中找数

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

  6. 在数组中查找指定元素_剑指 offer 第一题: 二维数组中的查找

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

  7. 牛客网-剑指offer 第一题(二维数组中的查找)

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

  8. JAVA剑指offer编程练习:二维数组中的查找(数组)

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

  9. 剑指offer面试题[3]-二维数组的查找

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

  10. 【剑指offer-Java版】03二维数组中的查找

    给定二维数组,和一个整数,二维数组的行从左到右递增,列从上到下递增. 查找该二维数组,看是否有和给定整数相等的值 技巧就是找到一个位于[i][j]的值,通过该值判断给定值可能存在于数组的哪一独立部分 ...

最新文章

  1. .Net Framework中的委托与事件
  2. 一个投标经理的标书检查笔记,拿来就用
  3. 圆柱体积怎么算立方公式_【六年级数学微课】巧算圆锥的体积
  4. python反向缩进_在Pycharm中对代码进行注释和缩进的方法详解
  5. linux-2.6.38 input子系统(用输入子系统实现按键操作)
  6. 论文浅尝 \ 联合知识图谱实例和本体概念的通用表示学习
  7. greenplum 替代mysql_转:MySQL到Greenplum迁移分析
  8. Intel超线程技术 Hyper-Threading Technology (5) - 微架构/流水线与超线程技术(前端/执行核)
  9. php v命令找不到,-bash: php: command not found 命令找不到
  10. iOS TableView 使用详解
  11. bzoj 1124: [POI2008]枪战Maf(贪心)
  12. php 操作xls,php中使用PHPExcel操作excel(xls)文件
  13. 怎么从服务器传输信息,大神们socket如何连接到服务器并判断从服务器传送回来的数据 谢谢谢谢 跪求啊 急用...
  14. 从Visual studio 2005移出Visual Assist
  15. 商汤连发11款新品,把自己逼上“AI落地”极限
  16. 怎么把图片用手机进行压缩?来试试这两个工具
  17. QBadgeView小红点的简单使用
  18. win下处理器组概念
  19. 自成一派的正则表达式
  20. 【sdx62】WCN6856加载wlan.ko系统崩溃问题解决方案

热门文章

  1. 【C#程序设计】教学讲义——第二章:简单C#程序设计
  2. 【MATLAB统计分析与应用100例】案例004:matlab调用smoothts函数对金融时间序列数据进行平滑处理
  3. React Native之didFocus和didBlur
  4. C和指针之动态内存分配malloc、calloc、realloc简单使用和区别
  5. Eclipse之Android项目名有红感叹号的解决办法
  6. 圆柱形成的动态演示图!超直观
  7. 勾股定理的形象拆分法,原来数学可以这么好玩!
  8. android studio 创建.9文件,自己使用Android studio创建.9(点9)图片
  9. java反射sethaha_Java反射深度测试
  10. python中matplotlib库实例_Python Matplotlib库入门指南