题目描述:
编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:
- 每行的元素从左到右升序排列。
- 每列的元素从上到下升序排列。
示例1:
提示:
- m == matrix.length
- n == matrix[i].length
- 1 <= n, m <= 300
- -109 <= matrix[i][j] <= 109
- 每行的所有元素从左到右升序排列
- 每列的所有元素从上到下升序排列
- -109 <= target <= 109
思路:
最先想到的方法是DFS,因为好久没写过DFS了,刚开始写出来跑完示例,能通过还是很开心的。但是提交之后,发现数据量大的数据通不过。于是看了官方答案,感觉太妙了。
二分查找每次搜索可以排除半行或半列的元素,Z字形查找每次搜索可以排除一行或一列的元素。
代码如下:
public static boolean searchMatrix(int[][] matrix, int target) {
int m = matrix.length;
int n = matrix[0].length;
int x = 0;
int y = n-1;
while(x<m&&y>=0)
{
if(matrix[x][y]==target)
return true;
if(matrix[x][y]<target)
x++;
else
y--;
}
return false;
}
感觉自己还是太菜了,不过未来的路还很长,希望我可以在未来的一天写出和官方答案一样的解。