搜索二维矩阵II
一、题目描述
编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:
- 每行的元素从左到右升序排列。
- 每列的元素从上到下升序排列。
二、解法
1、直接查找O(mn)
首先遍历每一行for (int[] row : matrix)
,遍历每一行的元素for (int element : row)
,判断是否等于target
。
图解算法
Java代码
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
//遍历每一行的数组
for (int[] row : matrix) {
//遍历每一个元素
for (int element : row) {
if (element == target) {
return true;
}
}
}
return false;
}
}
2、Z字型查找O(mn)
先查看右上角的元素大小,已知每个元素左边的都小于该元素,每个元素下边的都大于该元素。
所以如果该元素大于target,则y–。
所以如果该元素小于target,则x++。
图解算法
Java代码
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int m = matrix.length, n = matrix[0].length;
int x = 0, y = n - 1;
while (x < m && y >= 0) {
if (matrix[x][y] == target) {
return true;
}
if (matrix[x][y] > target) {
--y;
} else {
++x;
}
}
return false;
}
}