题目描述
给定一个有N*M的整形矩阵matrix和一个整数k,matrix的每一行和每一列都是排好序的。实现一个函数,判断k是否在matrix中。
要求时间复杂度o(M+N)空间复杂度o(1)
例如:
0 1 2 5
2 3 4 7
4 4 4 8
5 7 7 9
如果k为7则返回true;如果k为6则返回false
实现思路
定义右上角的元素坐标为(l,r) 因为该矩阵每一行每一列都有序,所以我们判断经过
具体解释如下:
0 1 2 5
2 3 4 7
4 4 4 8
5 7 7 9
当前(l,r)定位到矩阵右上角的5,判断5和输入值进行比较 5>4 所以根据有序
判断2<4 所以2下面这一列可能会有输入值,我们令l++,依次比较2下面的元素和
继续上述操作知道超出边界(l>matrix.length||r<0)
都没找到返回false
代码
public class code_03 {
public static void main(String[] args) {
int[][] matrix = {{0, 1, 2, 5}, {2, 3, 4, 7}, {4, 4, 4, 8}, {5, 7, 7, 9}};
System.out.println("不存在" + IsEmerge(matrix, -1));
System.out.println("存在" + IsEmerge(matrix, 5));
}
public static boolean IsEmerge(int[][] matrix, int k) {
int l, r;
//定义右上角的点坐标(l,r)
l = 0;
r = matrix[0].length - 1;
while (l < matrix.length && r >= 0) {
if (matrix[l][r] > k) {
r--;
} else if (matrix[l][r] < k) {
l++;
} else if (matrix[l][r] == k) {
return true;
}
}
return false;
}
}