• 杨氏矩阵中的查找


    杨氏矩阵

    杨氏矩阵中,每行元素是递增的,每列元素也是递增的。即a[i][j]<a[i+1][j]且a[i][j]<a[i][j+1]。要在这样的矩阵中查找某个数值元素的位置,复杂度可以达到o(m+n),其中n为矩阵行长度,m为矩阵列长度。

    开始我想的是每一行使用二分查找,时间复杂度为O(n * logm)

    看到网上使用的定位法,时间复杂度为O(n + m)

    首先定位到第一行最后一个元素,如果要查找的数等于这个元素,直接返回true。如果array[i][j]>num,向前寻找,如果array[i][j] < num向下寻找。直到找到这个数

    import com.gxf.util.Util;
    
    /**杨氏矩阵查找数
     * 杨氏矩阵:从左到右递增,从上到下递增
     * 查找一个数是否在矩阵中
     * 在返回true,否则返回false
     * @author GXF
     *
     */
    public class YongRec {
    
        public static void main(String[] args) {
            int  array[][] = {{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};
            Util.showTwoDimensionArray(array);
            YongRec yongRec = new YongRec();
            
            boolean result = yongRec.findNumInArray(array, 5);
            System.out.println("result = " + result);
        } 
        
        /**
         * 这里用的定位法
         * 时间复杂度为O(m + n)
         * @param array
         * @param num
         * @return
         */
        public boolean findNumInArray(int array[][], int num){
            if(array == null || array.length == 0)
                return false;
            int i = 0;
            int j = array[0].length - 1;
            while(true){
                if(array[i][j] == num)
                    return true;
                else if(j > 0 && array[i][j] > num)
                    j--;
                else if(i < array.length - 1 && array[i][j] < num)
                    i++;
                else 
                    return false;
            }//while
        }    
    
    }

    参考:http://blog.csdn.net/huangxy10/article/details/8017765

    http://blog.csdn.net/v_july_v/article/details/7085669

  • 相关阅读:
    ArrayList 和 Vector 的区别
    Redis在springboot中使用,读取字符串
    初始化Mysql
    Redis 安装
    React-脚手架
    React virtual DOM explained in simple English/简单语言解释React的虚拟DOM
    数据结构
    书单(18-19)
    算法复杂度
    otrs离线部署
  • 原文地址:https://www.cnblogs.com/luckygxf/p/4685839.html
Copyright © 2020-2023  润新知