二维数组中的查找这道题,出自 《剑指Offer》。也是著名的杨氏矩阵


在一个 n *m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的。输入一个数,判断矩阵中是否存在这个数。

思路

最简单的思路大家都是能想到的,就是 for循环嵌套遍历整个二维数组,这种做法效率太低,不建议。

因为这个矩阵,从左往右是递增,从上至下也是递增的,而且发现一个特点,就是这样的矩阵右上角的数是当前行最大的也是当前列中最小的。我们就可以从右上角入手。

1.当要找的数字比当前位置的数大的时候,因为矩阵是从左到右递增,只需要 列-- 就能排除掉一列,列–相当于从右往左走

2.当要找的数字比当前位置的数小的时候,因为矩阵是从上至下递增的,只需要 行++ 直接就能排除掉一行,行++相当于从上往下走。

如果要在下面的矩阵中查找7,我们从右上角的9开始,和要查找的数做比较

C语言代码

bool findNumberIn2DArray(int** matrix, int matrixSize, int* matrixColSize, int target){if (matrixSize == 0 || *matrixColSize == 0){return false;}int i = 0;//行int j = *matrixColSize-1;//列while (i < matrixSize && j >= 0){if (matrix[i][j] > target){//如果当前位置的值比要找的值大,那么要找的值肯定在这一行j--;}else if (matrix[i][j] < target){//如果要找得值比当前值要小,说要找的值不在当前行i++;}else{return true;}}//走到这里说明没有找到return false;
}

Java代码

public  boolean findNumberIn2DArray(int[][] matrix, int target) {if (matrix == null || matrix.length == 0) {return false;}int i = 0;int j = matrix[0].length-1;while (i < matrix.length-1 && j >= 0) {if (matrix[i][j] > target) {//如果当前位置的值比要找的值大,那么要找的值肯定在这一行j--;}else if (matrix[i][j] < target) {//如果要找得值比当前值要小,说要找的值不在当前行i++;}else {return true;}}//走到这里说明没有找到return false;}

题目链接 二维数组中的查找

二维数组中的查找(杨氏矩阵(C语言+Java))相关推荐

  1. c语言二维数组中的周边,【C语言】二维数组中的查找,杨氏矩阵

    //二维数组中的查找,杨氏矩阵 //在一个二维数组中,每行都依照从左到右的递增的顺序排序.每列都依照从上到下递增的顺序排序. //请完毕一个函数.输入这种一个数组和一个数,推断数组中是否包括这个数. ...

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

    题目 在一个二维数组中,每一行都依照从左到右递增的顺序排序,每一列都依照从上到下递增的顺序排序.请完毕一个函数,输入这种一个二维数组和一个整数.推断数组中是否含有该整数. 思路 [算法系列之三十三]杨 ...

  3. 剑指offer:面试题04. 二维数组中的查找

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

  4. 算法题001 剑指Offer 面试题三:二维数组中的查找

    剑指Offer题目1:二维数组中的查找 题目描述: http://ac.jobdu.com/problem.php?cid=1039&pid=0 在一个二维数组中,每一行都按照从左到右递增的顺 ...

  5. LeetCode-剑指 Offer 04. 二维数组中的查找

    剑指 Offer 04. 二维数组中的查找 思路一:暴力解法,两层for循环查找 时间复杂度为:O(nm) 空间复杂度为:O(1) class Solution {public:bool findNu ...

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

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

  7. [剑指offer]面试题3:二维数组中的查找

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

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

    目录 题目 解题思路 具体代码 题目 题目链接 剑指offer:二维数组中的查找 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺 ...

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

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

最新文章

  1. python【蓝桥杯vip练习题库】ALGO-91 Anagrams问题
  2. arcgis导出shp文件_地理工具学习--arcgis篇(15):CAD和SHP的简单转换
  3. 深入Java集合学习系列:HashMap的实现原理
  4. 北方股份无人驾驶矿卡_踏歌智行完成B轮2亿元融资,无人驾驶矿山赛道爆发在即...
  5. Codeforces 1045. A. Last chance(网络流 + 线段树优化建边)
  6. 黑盒测试概念简述,黑盒测试优缺点、黑盒用例设计方法简单介绍及黑盒测试方法使用总结
  7. python try exception类_python——异常类型
  8. apt apt-get 区别_apt 和 aptget 之间的区别
  9. 数据库的文本处理函数
  10. 【ArcGIS|空间分析】志愿者分配管理区域内共享单车(全国大学生GIS技能大赛试题)
  11. 单变量微分、导数与链式法则
  12. pandas教程(上)
  13. 计算机上无开根号功能 怎么计算机,攻略:2019年中级会计师无纸化考试 计算器怎么开根号?...
  14. STM32串口中断接收一帧数据
  15. Python 测试题(覆盖了大多数的基础知识和进阶)
  16. 【量化】量化交易入门系列6:量化交易学习书籍推荐(二)
  17. 手把手教你做时间序列图
  18. 2017.04.05 仿制网站
  19. pyecharts 中应用seaborns 调色板
  20. 论文解读 | Explaining and Harnessing Adversarial Examples

热门文章

  1. 玩过这些经典单机游戏_就说明你已经老了
  2. 坚持跑步1个月,有效果了
  3. easyui中打开新的面板跨域加载页面(没什么卵用这个)
  4. 求职简历模板免费下载制作
  5. HP Z620 Windows 7 系统安装(含磁盘阵列)
  6. java实现actionlistener_java中ActionListener的问题
  7. 转:做一个有趣的有意思的人
  8. SpringCloud学习笔记01
  9. Huawei Libra数据库常用语句
  10. 0028 自然数对 c/c++