从有序矩阵M x N中找出是否包含某一个数,要求时间复杂度为O(M+N)

Posted moris5013

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从有序矩阵M x N中找出是否包含某一个数,要求时间复杂度为O(M+N)相关的知识,希望对你有一定的参考价值。

有序指的是每行从左到右依次变大,每列从上到下依次变大

思路: 从右上顶点开始依次判断当前值与给定值的大小,往左下顶点移动,结束条件是下标超过范围

public class FindNumInOrderMatr 

    public static void main(String[] args) 
        int[][] matrix = new int[][]  
                 10, 12, 13, 15, 16, 17, 18 ,
                 23, 24, 25, 26, 27, 28, 29 ,
                 44, 45, 46, 47, 48, 49, 50 ,
                 65, 66, 67, 68, 69, 70, 71 ,
                 96, 97, 98, 99, 100, 111, 122 ,
                 166, 176, 186, 187, 190, 195, 200 ,
                 233, 243, 321, 341, 356, 370, 380  
        ;
        int k = 96;
        System.out.println(isContains(matrix, k));
    

    private static boolean  isContains(int[][] matrix, int k) 
        int  aR = 0;
        int  aC = matrix[0].length -1 ;
        while(aR <= matrix.length-1  &&  aC >= 0) 
            if(matrix[aR][aC] > k) 
                aC --;
            else if(matrix[aR][aC] < k) 
                aR ++;
            else 
                return true;
            
        
        return false;
    
    
    

 

以上是关于从有序矩阵M x N中找出是否包含某一个数,要求时间复杂度为O(M+N)的主要内容,如果未能解决你的问题,请参考以下文章

bzoj2818(欧拉函数递推)

算法--有序矩阵查找指定数

排序练习题:有序矩阵查找

BC100 有序序列合并

第二章 排序 || 第18节 有序矩阵查找练习题

2022-01-20: 矩形区域不超过 K 的最大数值和。 给你一个 m x n 的矩阵 matrix 和一个整数 k ,找出并返回矩阵内部矩形区域的不超过 k 的最大数值和。 题目数据保证总会存在一