二维数组中的查找(杨氏矩阵(C语言+Java))
二维数组中的查找这道题,出自 《剑指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))相关推荐
- c语言二维数组中的周边,【C语言】二维数组中的查找,杨氏矩阵
//二维数组中的查找,杨氏矩阵 //在一个二维数组中,每行都依照从左到右的递增的顺序排序.每列都依照从上到下递增的顺序排序. //请完毕一个函数.输入这种一个数组和一个数,推断数组中是否包括这个数. ...
- [剑指Offer]5.二维数组中的查找
题目 在一个二维数组中,每一行都依照从左到右递增的顺序排序,每一列都依照从上到下递增的顺序排序.请完毕一个函数,输入这种一个二维数组和一个整数.推断数组中是否含有该整数. 思路 [算法系列之三十三]杨 ...
- 剑指offer:面试题04. 二维数组中的查找
题目:二维数组中的查找 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该 ...
- 算法题001 剑指Offer 面试题三:二维数组中的查找
剑指Offer题目1:二维数组中的查找 题目描述: http://ac.jobdu.com/problem.php?cid=1039&pid=0 在一个二维数组中,每一行都按照从左到右递增的顺 ...
- LeetCode-剑指 Offer 04. 二维数组中的查找
剑指 Offer 04. 二维数组中的查找 思路一:暴力解法,两层for循环查找 时间复杂度为:O(nm) 空间复杂度为:O(1) class Solution {public:bool findNu ...
- 剑指offer刷题(java)|二维数组中的查找|替换空格|leetcode刷题
文章目录 前言 一.二维数组中的查找 题目 题解一 题解二 题解三 二.替换空格 题目 题解一 题解二 题解三 前言 本文主要是写了我做算法题的思路以及对其他优秀题解的自我理解. 一.二维数组中的查找 ...
- [剑指offer]面试题3:二维数组中的查找
面试题3:二维数组中的查找 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. ...
- 剑指offer:二维数组中的查找
目录 题目 解题思路 具体代码 题目 题目链接 剑指offer:二维数组中的查找 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺 ...
- python 二维数组长度_剑指offer二维数组中的查找【Java+Python】
点击上方"蓝字",关注了解更多 二维数组中的查找 1. 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序 ...
最新文章
- python【蓝桥杯vip练习题库】ALGO-91 Anagrams问题
- arcgis导出shp文件_地理工具学习--arcgis篇(15):CAD和SHP的简单转换
- 深入Java集合学习系列:HashMap的实现原理
- 北方股份无人驾驶矿卡_踏歌智行完成B轮2亿元融资,无人驾驶矿山赛道爆发在即...
- Codeforces 1045. A. Last chance(网络流 + 线段树优化建边)
- 黑盒测试概念简述,黑盒测试优缺点、黑盒用例设计方法简单介绍及黑盒测试方法使用总结
- python try exception类_python——异常类型
- apt apt-get 区别_apt 和 aptget 之间的区别
- 数据库的文本处理函数
- 【ArcGIS|空间分析】志愿者分配管理区域内共享单车(全国大学生GIS技能大赛试题)
- 单变量微分、导数与链式法则
- pandas教程(上)
- 计算机上无开根号功能 怎么计算机,攻略:2019年中级会计师无纸化考试 计算器怎么开根号?...
- STM32串口中断接收一帧数据
- Python 测试题(覆盖了大多数的基础知识和进阶)
- 【量化】量化交易入门系列6:量化交易学习书籍推荐(二)
- 手把手教你做时间序列图
- 2017.04.05 仿制网站
- pyecharts 中应用seaborns 调色板
- 论文解读 | Explaining and Harnessing Adversarial Examples