【题目】
给定一个有N×M的整型矩阵matrix和一个整数K,matrix每行每列都排好序了。
实现一个函数,判断K是否在matrix中。
【举例】
0 1 2 5
2 3 4 7
4 4 4 8
5 7 7 9
K=7,返回true;K=6,返回false
【要求】
时间复杂度O(N+M),额外控件复杂度为O(1)
【代码】
public static void main(String[] args) {
int[][] arr = { {0,1,2,5,}, {2,3,4,7}, {4,4,4,8},{5,7,7,9} };
System.out.println(find1(arr,6));//false
System.out.println(find1(arr,7));//true
System.out.println(find1(arr,44));//false
}
//在行列都排好序的矩阵中找数
public static boolean find(int[][] matrix,int k){
//时间复杂度要求没达到,最坏M×N
for(int h=0;h<matrix.length;h++ ){
if(matrix[h][0]<k && matrix[h][matrix[0].length-1]>k){
for(int l=0;l<matrix[0].length;l++){
if(matrix[h][l]==k){
return true;
}
}
}
}
return false;
}
public static boolean find1(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){//右上角比k大,说明k不可能在最后一列,看左边的列
col--;
}
else{//右上角比k小,说明k不可能在第一行了,看下面的行
row++;
}
}
return false;
}