欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > [Java恶补day22] 240. 搜索二维矩阵Ⅱ

[Java恶补day22] 240. 搜索二维矩阵Ⅱ

2025/6/13 22:54:17 来源:https://blog.csdn.net/FUNNYQian123/article/details/148594692  浏览:    关键词:[Java恶补day22] 240. 搜索二维矩阵Ⅱ

编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:
每行的元素从左到右升序排列
每列的元素从上到下升序排列

示例 1:
在这里插入图片描述
输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5
输出:true

示例 2:
在这里插入图片描述
输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 20
输出:false

提示:
m == matrix.length
n == matrix[i].length
1 <= n, m <= 300
− 10 9 -10^9 109 <= matrix[i][j] <= 10 9 10^9 109
− 10 9 -10^9 109 <= target <= 10 9 10^9 109


知识点:
数组、矩阵、排除法


解:
最小的元素在矩阵左上方,最大的元素在矩阵右下方。
核心思想:从右上方开始寻找采用与二分法类似的if-else语句进行判断
在遍历ij双指针的while循环中:
若当前元素==target
=> 返回true,表示已找到
若当前元素<target
=> 表示目标不在当前这行,需让指向行的变量指针i++,遍历下面一行、列下标为j的元素
若当前元素>target
=> 表示目标在当前这行,需让指向列的变量指针j--,遍历前面一列、行下标为i的元素
当程序运行到while循环外时,表明找不到target,因此返回false

测试用例1为例:
在这里插入图片描述

时间复杂度: O ( m + n ) O(m+n) O(m+n)
空间复杂度: O ( 1 ) O(1) O(1)。未使用辅助数组,仅使用int类型的辅助变量。

class Solution {public boolean searchMatrix(int[][] matrix, int target) {//获取行数、列数int m = matrix.length;int n = matrix[0].length;//从右上角开始找int i = 0;int j = n - 1;//只要还有元素,就继续循环while (i < m && j >= 0) {//找到元素,返回if (matrix[i][j] == target) {return true;}//若当前元素>target,则遍历前面一列else if (matrix[i][j] > target) {j--;}//否则,遍历下面一行else {i++;}}//此时表明不存在元素return false;}
}

参考
1、灵神题解

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词