leetcode:剑指offer----二维数组中查找
题目:
在一个 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----二维数组中查找相关推荐
- 【二分法】剑指offer:二维数组中的查找
对于二维数组中每一个一维数组,用二分查找,判断能否找到该数 leetcode专题笔记:二分法查找(1)(附leetcode题)_m0_52043808的博客-CSDN博客 代码: class Solu ...
- 剑指Offer 二维数组中的查找
题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路法一: * 矩阵是 ...
- python 二维数组长度_剑指offer二维数组中的查找【Java+Python】
点击上方"蓝字",关注了解更多 二维数组中的查找 1. 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序 ...
- 剑指offer - 二维数组中的查找
题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. /* 思路 * 矩阵是 ...
- 剑指Offer——二维数组的查找(C语言)
题目 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序. 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 数据范围 二维数组中元素 ...
- 隔一段时间查找一次 golang_剑指 offer-04 二维数组中的查找
算法名称:二维数组中的查找 题目内容:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整 ...
- 剑指0ffer04.二维数组中的查找
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 示例: 现 ...
- 剑指Offer04. 二维数组中的查找
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 相当于二叉 ...
- leetcode:剑指 Offer 56 - I. 数组中数字出现的次数
故心故心故心故心小故冲啊 文章目录 题目 一.解法一:set(利用不重复特性) 二.解法二:lowbit(x)位运算 题目 一.解法一:set(利用不重复特性) /*** @param {number ...
- 剑指offer之二维数组中查找
1 问题 二维数组中查找: 在一个二维数组钟,每一行都按照从左到右递增得顺序排列,每一列 都按照从上往下得递增排列,请完成一个函数,输入这样得一个二维数组和一个 整数,判断数组是否含有该整数 列如: ...
最新文章
- vert.x 结合JAX-RS
- 大学java专业核心课程_计算机应用技术专业核心课程有哪些?
- 通信经典书籍(转载)
- Spring Boot druid监控页添加登录访问权限(用户名+密码)
- [HNOI2010 Planar平面图判定]
- 用HttpClientFactory来实现简单的熔断降级
- 利用Arthas排查NoSuchMethodError
- 【转】c++优先队列(priority_queue)用法详解
- java applet鼠标点击事件_Swing 鼠标单击事件?
- 基础IO(文件接口、安装内核源码超详细步骤图解、静态库与动态库)
- 【学习笔记】计算机导论之操作系统和文件管理
- 前端性能优化(慕课网笔记)-3-代码优化
- 抖音极速版—–青龙面板
- 天空的颜色 454
- android拦截彩信,Android手机恶意彩信拦截系统的设计和实现
- 短信也能玩出新花样?听阿里云产品运营畅聊“智能消息”服务
- [芭比公主系列][国英双语]芭比之十二芭蕾舞公主 Barbie in The 12 Dancing Princesses
- 读书笔记:《钱穆-zg历代zz得失》
- swustOJ 1378 Best Grass
- 服务器机箱装系统蓝屏,电脑安装系统,容易出现蓝屏、死机等5大问题,装机达人给你支招...