题目描述:
给定一个有N×M的整型矩阵matrix和一个整数K,matrix的每一行和每一列都是排好序的,实现一个函数,判断K是否在matrix中,
要求时间复杂度O(N +M),额外空间复杂度为O(1)
思路:抓住题目的特点,矩阵的每一行和每一列都是排好序的,以升序为例,设置一个坐标,从右上角值为4的位置出发,如果该位置的值大于K,则将该坐标向左移动,如果该位置的值小于K,则将该坐标的向下移动,如果相等,则直接返回true,如果该坐标的行或列超出了矩阵的行或列的范围,仍然没有找到,则返回false
public class FindNumber {
public static boolean isContains(int[][] matrix, int K) {
int h = 0;
int l = matrix[0].length- 1;
while(l >= -1 && h < matrix.length) {
if (matrix[h][l] > K) {
l--;
} else if (matrix[h][l] < K) {
h++;
} else {
return true;
}
}
return false;
}
public static void main(String[] args) {
int[][] matrix = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
int K = 63;
System.out.println(isContains(matrix, K));
}
}