【剑指offer】面试题04:二维数组中的查找(java)
初始检查: 检查矩阵是否为空或没有有效的行或列,如果是,直接返回false。 初始化索引: 从右上角开始,初始化行索引i为0,列索引j为最后一列的索引。 循环查找: 使用while循环,直到i超过行数或j小于0。 结束返回: 如果循环结束后未找到目标值,返回false。
发布日期:2021-04-30 21:04:53
浏览次数:79
分类:精选文章
本文共 1165 字,大约阅读时间需要 3 分钟。
要解决一个二维数组中查找特定整数的问题,可以利用二叉搜索的思路,结合数组的结构特点,从右上角开始查找,逐步缩小搜索范围。
方法思路
问题分析: 给定一个按行递增、按列递增的二维数组,目标是查找是否存在一个特定的整数。由于数组的特殊结构,每行递增意味着左边的数值较小,右边的数值较大;每列递增意味着上面的数值较小,下面的数值较大。因此,可以通过类似于二叉搜索的方法高效地查找目标值。
算法选择: 采用递归或迭代的方式,从右上角开始,比较当前元素与目标值:
- 如果当前元素等于目标值,返回true。
- 如果当前元素大于目标值,向左移动(减小列索引j)。
- 如果当前元素小于目标值,向下移动(增加行索引i)。
优化思路: 这种方法的时间复杂度为O(n + m),其中n和m分别是矩阵的行数和列数,因为每个元素最多被访问一次。
解决代码
public class Solution { public boolean findNumberIn2DArray(int[][] matrix, int target) { if (matrix == null || matrix.length == 0 || matrix[0].length < 1) { return false; } int j = matrix[0].length - 1; int i = 0; while (i < matrix.length && j >= 0) { if (matrix[i][j] == target) { return true; } else if (matrix[i][j] > target) { j--; } else { i++; } } return false; }} 代码解释
- 比较当前元素: 如果当前元素等于目标值,返回true。
- 当前元素大于目标值: 将j减1,向左移动。
- 当前元素小于目标值: 将i增加1,向下移动。
这种方法利用了二维数组的有序性质,能够高效地缩小搜索范围,确保在最优时间复杂度内完成任务。
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2026年06月04日 18时59分48秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
PHP获取IP所在地区(转)
2023-03-01
PHP获取IP的方法对比
2023-03-01
php获取json里面内容
2023-03-01
R2的版本由来
2023-03-01
PHP获取图片宽度高度、大小尺寸、图片类型、用于布局的img属性
2023-03-01
PHP获取当前文件的绝对路径
2023-03-01
PHP获取当前时间、时间戳的各种格式写法汇总
2023-03-01
PHP获取当前页面的完整URL
2023-03-01
php获取数据库中数据生成json,中文乱码问题的解决方案
2023-03-01
php获取文件夹中文件的两种方法
2023-03-01
PHP获取日期的一些方法总结
2023-03-01
R2学习记录
2023-03-01
PHP获取本周的每一天的时间
2023-03-01
php获取用户真实IP和防刷机制
2023-03-01
php获取网页内容的三种方法
2023-03-01
R-CNN算法优化策略
2023-03-01
PHP规范PSR0和PSR4的理解
2023-03-01
php解析ipa包,获取logo
2023-03-01
R&Rstudio安装各种包
2023-03-02
php设置cookie,在js中如何获取
2023-03-02