编写一个高效的算法来搜索 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
−109-10^9−109 <= matrix[i][j] <= 10910^9109
每行的所有元素从左到右升序排列
每列的所有元素从上到下升序排列
−109-10^9−109 <= target <= 10910^9109
思路:因为二维矩阵是递增的,所以就for循环两次,取出元素与target比较,如果一致就返回true,不一致,就继续循环,然后比target大,就跳出当前子for循环,进行下一个父for循环。
public boolean searchMatrix(int[][] matrix, int target) {
boolean haveT = false;
for (int i = 0 ; i < matrix.length ; i++){
for (int j = 0 ; j < matrix[i].length ; j ++){
if (matrix[i][j] == target){
//返回结果
return true;
}else if (matrix[i][j] > target){
//下一个循环
break;
}
}
}
return haveT;
}
这篇博客介绍了如何在一个有序的mxn矩阵中高效地查找目标值。矩阵的每一行和每一列都是升序排列的。通过双重循环遍历矩阵,当找到目标值时返回true,否则在遇到大于目标值的元素时跳出当前循环,继续下一行搜索,直至遍历完成。这个算法的时间复杂度为O(m+n)。
496

被折叠的 条评论
为什么被折叠?



