• 二维数组中的查找


    题目

    在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,

    判断数组中是否含有该整数

    思路

    选取右上角元素,
    元素大于Key-->剔除整列,
    元素小于key-->剔除整行

    #include <iostream>
    #include <vector>
    #include <fstream>
    using namespace std;
    
    template <class T>
    class Find
    {
        public:
            void find(vector<vector<T> > v,T num);
    };
    template <class T>
    void Find<T>::find(vector<vector<T> > v,T num)
    {
        int row=v.size();
        int r=0;
        int col=v[0].size();
        int c=col-1;
        bool f=false;
        
        /*
         *对于row行 从上0开始递增,停止的条件是小于行的长度
         *对于column列,从右边列的长度开始递减,停止的条件是大于等于零
         *因为查询最右下角的元素时,第0列是允许的不能停止
         */
        while(r<row&&c>=0)
        {
            if(v[r][c]==num)    
            {
                f=true;
                break;
            }
            else if(v[r][c]>num)//行依次增大,列依次增大,要查找的数比这个数小,则肯定在左边 
                --c;
            else//否则,在下边 
                ++r;
        }
        if(f)
            cout<<" 查找成功,横坐标为:" <<r+1<<" 纵坐标为:"<<c+1<<endl;
        else
            cout<<" 查找失败."<<endl;
    }
    
    int main()
    {
        int n;
        cout<<" 请输入二维数组的大小."<<endl;
        cin>>n;
        
        ifstream in("1.txt");
        vector<vector<int> > v(0,vector<int>(0));
        v.resize(n);
        for(int i=0;i<n;++i)
        {
            v[i].resize(n);
            for(int j=0;j<n;++j)
                in>>v[i][j];
        }
        
        int num;
        cout<<" 请输入要查找的数值."<<endl;
        cin>>num;
        
        Find<int> f;
        f.find(v,num);
        return 0;
    }
  • 相关阅读:
    多语言网站(如何实现网站的多语言版本?)
    宝塔linux面板.txt
    什么是海外镜像点?
    一步一步CCNA之三:路由器全局配置模式
    Kmeans算法 与 KNN算法
    新浪公开课
    shanghaiR
    Announcing Couch Crawler, a CouchDB search engine/crawler
    字符串相似度算法(编辑距离算法 Levenshtein Distance)
    R与SAS、SPSS的比较
  • 原文地址:https://www.cnblogs.com/tianzeng/p/10074007.html
Copyright © 2020-2023  润新知