在行列都排好序的矩阵中找数

来源:互联网 发布:战舰世界 战列舰 知乎 编辑:程序博客网 时间:2024/05/16 07:32

【题目】

给定一个有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;    }
原创粉丝点击