【面试题】剑指Offer-3-在二维数组中进行查找
来源:互联网 发布:淘宝旗舰版是什么意思 编辑:程序博客网 时间:2024/06/07 19:24
题目概述
给一个二维数组(例如下图),在二维数组的每一列,每一行中,元素的大小是递增的;如何快速判断一个数存不存在
解题思路
这里呢,从右上角开始判断,6的下标(0,2)
有四种情况
1、就是要查找的元素,则返回TRUE
2、比要查找元素大,则x坐标+1,缩小判断的范围
3、比要查找元素小,则y坐标-1,缩小判断的范围
4、范围内不包括任何元素,则表示没有找到,范围FALSE
图解
递归实现
//剑指第三题//题目:一个M*N数组//数组从上到下,从左到右为分别为增序//给一个数,如何快速判断其存不存在#include<iostream>using namespace std;#include<assert.h>const int M = 3;const int N = 3;//递归实现//缺点,可能导致栈溢出bool IsExist(const int* martix, int x, int y, int key){assert(martix);if (x < M && x >= 0 && y < N && y >= 0){int num = martix[x*M + y];if (num > key)return IsExist(martix, x, y - 1, key);else if (num < key)return IsExist(martix, x + 1, y, key);elsereturn true;}return false;}
非递归实现
//剑指第三题//题目:一个M*N数组//数组从上到下,从左到右为分别为增序//给一个数,如何快速判断其存不存在#include<iostream>using namespace std;#include<assert.h>const int M = 3;const int N = 3;//非递归进行实现bool IsExistNonR(const int* martix, int x, int y, int key){assert(martix);while (x < M && x >= 0 && y < N && y >= 0){int num = martix[x*M + y];if (num > key)y--;else if (num < key)x++;elsereturn true;}return false;}
测试函数
void TestFindNum(){const int martix[] = { 1, 4, 6, 2, 5, 7, 3, 6, 9 };int num = 0;cout << "请输入要查找的数:";cin >> num;cout << "IsExist:" << IsExist(martix, 0, M - 1, num) << endl;cout << "IsExist:" << IsExistNonR(martix, 0, M - 1, num) << endl;}
1 0
- 【面试题】剑指Offer-3-在二维数组中进行查找
- 剑指Offer 面试题3:二维数组中查找
- 剑指Offer 面试题3 二维数组中查找
- 剑指offer 面试题3:二维数组中查找
- 【剑指offer】面试题3 数组 二维数组的查找
- 【剑指offer】面试题3:二维数组中的查找
- 【剑指offer】面试题3:二维数组中的查找
- 剑指offer 面试题3 二维数组的查找
- 剑指Offer:面试题3 二维数组中的查找
- 剑指offer面试题3二维数组的查找
- 《剑指Offer》面试题3:二维数组中的查找
- 剑指offer面试题3-二维数组中的查找
- 【剑指Offer学习】【面试题3 :二维数组中的查找】
- 二维数组中的查找(剑指offer面试题3)
- 【剑指offer】 面试题3: 二维数组中的查找
- 剑指Offer面试题3:二维数组中的查找
- 剑指Offer:面试题3 二维数组中的查找
- 【剑指offer】面试题3:二维数组的查找
- Jquery中BlockUI的遮罩效果详解
- Spring ContextLoaderListener与DispatcherServlet所加载的applicationContext的区别
- C++ template简单应用
- Greenplum数据库优化器
- Right click
- 【面试题】剑指Offer-3-在二维数组中进行查找
- 初学github过程中遇到的问题
- nginx配置文件
- 64位系统装32位的Python,Python version 3.5 required, which was not found,DLL load failed
- oralce 追加数据文件表空间
- linux常用命令
- js设计模式:单例模式(1)
- Hadoop Hive sql语法详解
- Linux Kernel 设备驱动之I2C之client之发送消息格式