题目:

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

示例:

解答思路:

面对这样的问题第一反应是暴力搜索吧!使用两个循环遍历每个元素,这样的话时间复杂度就是O(N*M)。思考一秒钟这肯定不是最优的,开始发现规律,左上角的元素是最小的,右下角的元素是最大的,右上角和左下角的元素在某个方向上最大,在另一个方向最小。具体的实现思路下面再说。

  • C++解答思路:

拿到题经过思考以后,想到了使用vector中的find函数在每一行中搜索元素,在不考虑vector的find函数的时间复杂度下,该方法的时间复杂度为O(N)。

bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {int flag = -1;if(matrix.size() == 0){return false;}for (auto mat:matrix){if (find(mat.begin(),mat.end(),target) != mat.end()){flag = 1;break;}else{flag = 0;continue;}}if(flag){return true;}else{return false;}}

根据左下角和右上角元素的特性,假设从右上角开始搜索,然后根据大小决定向大的方向或者向小的方向移动。

bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {int rows = matrix.size();if (rows==0){return false;}int cols = matrix.at(0).size();if(cols == 0){return false;}int row = rows-1,col = 0,flag = 0;while (row >= 0 && col < cols){int val = matrix.at(row).at(col);if(val < target){col += 1;}else if(val > target){row -= 1;}else{flag = 1;break;}}if (flag){return true;}else{return false;}}

两种方法的用时都为24ms

  • python解答思路:

python的解答思路和C++第二种一样。

 def findNumberIn2DArray(self, matrix: List[List[int]], target: int) -> bool:row,col = len(matrix) - 1,0flag = 0while row >= 0 and col < len(matrix[0]):val = matrix[row][col]if val > target:row -= 1elif val < target:col += 1elif val == target:flag = 1breakif flag:return Trueelse:return False

leetcode:剑指offer----二维数组中查找相关推荐

  1. 【二分法】剑指offer:二维数组中的查找

    对于二维数组中每一个一维数组,用二分查找,判断能否找到该数 leetcode专题笔记:二分法查找(1)(附leetcode题)_m0_52043808的博客-CSDN博客 代码: class Solu ...

  2. 剑指Offer 二维数组中的查找

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

  3. python 二维数组长度_剑指offer二维数组中的查找【Java+Python】

    点击上方"蓝字",关注了解更多 二维数组中的查找 1. 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序 ...

  4. 剑指offer - 二维数组中的查找

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

  5. 剑指Offer——二维数组的查找(C语言)

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

  6. 隔一段时间查找一次 golang_剑指 offer-04 二维数组中的查找

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

  7. 剑指0ffer04.二维数组中的查找

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

  8. 剑指Offer04. 二维数组中的查找

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

  9. leetcode:剑指 Offer 56 - I. 数组中数字出现的次数

    故心故心故心故心小故冲啊 文章目录 题目 一.解法一:set(利用不重复特性) 二.解法二:lowbit(x)位运算 题目 一.解法一:set(利用不重复特性) /*** @param {number ...

  10. 剑指offer之二维数组中查找

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

最新文章

  1. vert.x 结合JAX-RS
  2. 大学java专业核心课程_计算机应用技术专业核心课程有哪些?
  3. 通信经典书籍(转载)
  4. Spring Boot druid监控页添加登录访问权限(用户名+密码)
  5. [HNOI2010 Planar平面图判定]
  6. 用HttpClientFactory来实现简单的熔断降级
  7. 利用Arthas排查NoSuchMethodError
  8. 【转】c++优先队列(priority_queue)用法详解
  9. java applet鼠标点击事件_Swing 鼠标单击事件?
  10. 基础IO(文件接口、安装内核源码超详细步骤图解、静态库与动态库)
  11. 【学习笔记】计算机导论之操作系统和文件管理
  12. 前端性能优化(慕课网笔记)-3-代码优化
  13. 抖音极速版—–青龙面板
  14. 天空的颜色 454
  15. android拦截彩信,Android手机恶意彩信拦截系统的设计和实现
  16. 短信也能玩出新花样?听阿里云产品运营畅聊“智能消息”服务
  17. [芭比公主系列][国英双语]芭比之十二芭蕾舞公主 Barbie in The 12 Dancing Princesses
  18. 读书笔记:《钱穆-zg历代zz得失》
  19. swustOJ 1378 Best Grass
  20. 服务器机箱装系统蓝屏,电脑安装系统,容易出现蓝屏、死机等5大问题,装机达人给你支招...

热门文章

  1. 作者:纪珍(1982-),女,中国科学院国家空间科学中心副研究员
  2. 【离散数学】集合的包含排斥原理
  3. 暴力枚举也不能没有底线(洛谷P1003题题解,Java语言描述)
  4. 【Python】Python中的lambda匿名函数
  5. 快讯|腔镜手术机器人研发商“北京术锐”完成数千万元 A 轮融资,顺为资本领投...
  6. 这五个超强PPT技巧,从小白到大神的距离只差这一点!
  7. 回合制-战斗机制-实现分析
  8. Oracle EBS 入门
  9. html-javascript前端页面刷新重载的方法汇总
  10. Oracle SQL Loader的详细语法