• 数组之杨氏矩阵


    参考资料:http://blog.csdn.net/sgbfblog/article/details/7745450 

    题目:

         杨氏矩阵----------矩阵每一行元素从左到右依次递增;每一列从上到下依次递增

         问题:判断任意一个元素是否在该矩阵中

    例如如下的杨氏矩阵:

    134218~1

    解法一:

          step_wise线性搜索算法----------从右上角开始,每次将待搜索值与右上角元素进行比较,若待搜索元素大于右上角值,则去除一行,否则去除一列。

    比如待搜索元素为13,右上角元素为15,那么右上角元素所在列删除(因为,列逐渐递增),同理11小于13因此删除一行…最终查找的路线为下图中红色

    路线,最差的情况下,查找从右上角直到左下角对于M*N矩阵,时间复杂度为O(M+N)

    134218~1

    /*
     *
     */
    
    #include<iostream>
    using namespace std;
    
    bool find(int (*array)[3],int m,int n,int value)
    {
        bool findout=false;
        int row=0;
        int col=n-1;
    
        while(!findout && row <m && col>=0)
        {
            if(array[row][col]==value)
            {
                findout=true;
                cout<<"row:"<<row<<",col:"<<col<<endl;
            }
            else if(array[row][col]>value)
            {
                col--;
            }
            else
            {
                row++;
            }
        }
        return findout;
    }
    
    int main()
    {
        int array[3][3]={
            {1,3,8},
            {2,4,9},
            {3,5,17}
        };
        int m=3;
        int n=3;
        int value=12;
        bool result=find(array,m,n,value);
        if(result)
        {
            cout<<"TURE"<<endl;
        }
        else
        {
            cout<<"FLASE"<<endl;
        }
    }

    解法二:

       二分算法------从矩阵的中间行或者中间列或者对角线开始查找,找到满足:

     ai < s < ai+1 ,  其中ai为矩阵中的值。将矩阵分成两个子矩阵,然后继续进行划分
     
       (1)从中间行开始查找
        134225~1
     
     
        (2)从中间列开始查找
        134225~2[1]
     
     
        (3)从对角线开始查找
        134225~3[1]
  • 相关阅读:
    Element-ui组件--pagination分页
    vue数据请求
    CSS设置背景透明字体不透明
    Sublime Text3的快捷键和插件
    Sublime Text 3 安装Package Control
    想学习一下node.js,重新安装配置了node
    js 上传图片
    js 前端不调接口直接下载图片
    js 获取当前URL信息
    js 常用的正则表达式
  • 原文地址:https://www.cnblogs.com/luosongchao/p/3679456.html
Copyright © 2020-2023  润新知