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

测试用例:

  • 二维数组中包含查找的数字(查找的数字是数组中的最大值和最小值;查找的数字介于数组中的最大值和最小值之间)。
  • 二维数组中没有查找的数字(查找的数字大于数组中的最大值;查找的数字小于数组中的最小值;查找的数字在数组的最大值和最小值之间但数组中没有这个数字)。
  • 特殊输入测试(输入空指针)。

测试代码:

/*
***数字包含在数组中(为数组中的最大值或最小值或介于最大与最小之间)
***数字不包含在数组中(大于最大值或小于最小值或介于最大与最小之间但不包含)
***输入数组为空指针
*/
void test(char* testName, int* matrix, int rows, int columns, int number, bool expected){
if(testName != nullptr){
printf("%s begins: ", testName);
}
bool result = find(matrix, rows, columns, number);
if(result == expected){
printf("Passed.\n");
}
else{
printf("Failed.\n");
}
} /*******数组********/
// 1 2 8 9
// 2 4 9 12
// 4 7 10 13
// 6 8 11 15
int matrix[][4] = {{1, 2, 8, 9}, {2, 4, 9, 12}, {4, 7, 10, 13}, {6, 8, 11, 15}}; //要查找的数在数组中
void test1(){
test("test1", (int*)matrix, 4, 4, 7, true);
} //要查找的数不在数组中
void test2(){
test("test2", (int*)matrix, 4, 4, 5, false);
} //要查找的数是数组中最小的数字
void test3(){
test("test3", (int*)matrix, 4, 4, 1, true);
} //要查找的数是数组中的最大的数字
void test4(){
test("test4", (int*)matrix, 4, 4, 15, true);
} //要查找的数比数组中最小的数字还小
void test5(){
test("test5", (int*)matrix, 4, 4, 0, false);
} //要查找的数比数组中最大的数字还大
void test6(){
test("test6", (int*)matrix, 4, 4, 16, false);
} //鲁棒性测试,输入空指针
void test7(){
test("test7", nullptr, 0, 0, 16, false);
}

本题考点:

  • 考查应聘者对二维数组的理解及编程能力。二维数组在内存中占据连续的空间。在内存中从上到下存储各行元素,在同一行中按照从左到右的顺序存储。因此我们可以根据行号和列号计算出相对于数组首地址的偏移量,从而找到对应的元素。
  • 考查应聘者分析问题的能力。当应聘者发现问题比较复杂时,能不能通过具体的例子找出其中的规律,是能否解决这个问题的关键所在。这个题目只要从一个具体的二维数组的右上角开始分析,就能找到查找的规律,从而找到解决问题的突破口。

实现代码:

#include <cstdio>

bool find(int* matrix, int rows, int columns, int number){
bool found = false;
if(matrix != nullptr && rows > 0 && columns > 0){
int row = 0;
int column = columns - 1;
while(row < rows && column >= 0){
if(matrix[row*columns+column] == number){
found = true;
break;
}
else if(matrix[row*columns+column] > number){
column--;
}
else{
row++;
}
}
}
return found;
}
int main(){
test1();
test2();
test3();
test4();
test5();
test6();
test7();
return 0;
}

剑指offer笔记面试题4----二维数组中的查找的更多相关文章

  1. 【剑指offer】面试题 4. 二维数组中的查找

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

  2. 剑指Offer:面试题3——二维数组中的查找(java实现)

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

  3. 【剑指Offer】面试题04. 二维数组中的查找

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

  4. 《剑指offer》面试题04. 二维数组中的查找

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

  5. 《剑指offer》面试题3 二维数组中的查找 Java版

    (二维数组,每行递增,每列递增.输入二维数组和一个整数,判断数组中是否含有此数.) 我的方法:拿到题目,根据题目条件我提取出这样一个特性:一个数的右边和下面的数都比它大.于是就可以写出一种递归的方法: ...

  6. 剑指Offer(一):二维数组中的查找

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

  7. 剑指offer编程题Java实现——二维数组中的查找

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

  8. 剑指Offer(书):二维数组中的查找

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

  9. [剑指offer]第1题,二维数组中的查找

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

  10. 【剑指Offer学习】【面试题:二维数组中的查找】PHP实现

    最近一直看剑指Offer.里面很多算法题.于是就想着用PHP来显示一下. 题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序. 请完成一个函数,输入这样的 ...

随机推荐

  1. jQuery基础之事件

    jQuery基础之事件方法,如下图: 代码实现: <script src="JS/jquery-1.12.4.min.js"></script> <s ...

  2. replace find join

    >>> s='spam' >>> s=s.replace('m','111') >>> s 'spa111' >>> where ...

  3. 阿里巴巴 Service Mesh 落地的架构与挑战

    点击下载<不一样的 双11 技术:阿里巴巴经济体云原生实践> 本文节选自<不一样的 双11 技术:阿里巴巴经济体云原生实践>一书,点击上方图片即可下载! 作者 | 方克明(溪翁 ...

  4. Java中的try-catch-finally异常处理

    Java中的try-catch-finally异常处理 一.异常处理 异常(Exception):是在运行发生的不正常情况. 原始异常处理: if(条件) { 处理办法1 处理办法2 处理办法3 } ...

  5. Oracle:row_number()、rank()、dense_rank()

    语法:ROW_NUMBER()  OVER(): row_number的用途非常广泛,排序最好用它,它会为查询出来的每一行记录生成一个序号,依次排序且不会重复,注意使用row_number函数时必须要 ...

  6. 这3步简单搭建Python http服务器 你肯定不会吧?

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:stark张宇 趁着周末的闲暇时光看看Python是什么鬼 给疲倦的 ...

  7. PyCharm配置Gitee

    PyCharm配置Gitee 第一步:下载安装Git https://git-scm.com/download/win 第二步:打开PyCharm,配置Git File->Setting-> ...

  8. VMware虚拟机安装Linux(CentOS)系统

    vmware workstation 虚拟机官方下载路径:https://www.vmware.com/cn/products/workstation-pro/workstation-pro-eval ...

  9. Dapr 运用之 Java gRPC 调用篇

    JAVA GRPC 服务与调用 安装协议编译器 下载对应的版本编译器,并把路径加入到环境变量中,执行以下命令生成代码 protoc -I=$SRC_DIR --java_out=$DST_DIR $S ...

  10. HTML5变化

    HTML5变化 新的语义化元素 header footer nav main article section 删除了一些纯样式的标签 表单增强 新API 离线 (applicationCache ) ...