在行列都排好序的矩阵中找数
1、题目描述
-
给定一个有N*M的整型矩阵matrix和一个整数K,matrix的每一行和每一 列都是排好序的。实现一个函数,判断K是否在matrix中。
-
【要求】 时间复杂度为O(N+M),额外空间复杂度为O(1)。
2、思路。
-
这里从数据状况来思考。由于数据每一行和列都是排好序的。
-
每一次先判断右上角的数a,如果是小于就说明a下面的数不可能。
便往左移动,到达b的位置。再做相同的判断。
如果是大于,说明a左边的数不可能,便往下移动。依次类推
3、举例
从一个二维数组中查看是否包含0这个数
4、代码实现(java)
public static boolean isContains(int[][] matrix, int K) {
int row = 0;
int col = matrix[0].length - 1;
while (row < matrix.length && col > -1) {
if (matrix[row][col] == K) {
return true;
} else if (matrix[row][col] > K) {
col--;
} else {
row++;
}
}
return false;
}