题目链接:Search a 2D Matrix
Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:
* Integers in each row are sorted from left to right.
* The first integer of each row is greater than the last integer of the previous row.
这道题很简单,为此专门写篇博客其实算博客凑数了。给你一个每一行每一列都是增序,且每一行第一个数都大于上一行末尾数的矩阵,让你判断某个数在这个矩阵中是否存在。
假设矩阵是m*n,扫一遍的时间复杂度就是O(m*n),题目中给出的这么特殊的矩阵,时间复杂度可以降到O(m+n),具体代码如下,写的比较挫。
public class Solution { public boolean searchMatrix(int[][] matrix, int target) { if (matrix.length == 0) return false; int x = matrix.length; int y = matrix[0].length; int i = 0, j = 0; while (i < x && matrix[i][j] <= target) { i++; } if (i > 0) i--; while (j < y) { if (j < y && matrix[i][j] == target) return true; j++; } return false; } }