zoukankan      html  css  js  c++  java
  • 二维数组中的查找

    题目

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

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

    思路

    选取右上角元素,
    元素大于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;
    }
  • 相关阅读:
    Azure HPC Pack Cluster添加辅助节点
    Azure HPC Pack 辅助节点模板配置
    Azure HPC Pack配置管理系列(PART6)
    Windows HPC Pack 2012 R2配置
    Azure HPC Pack 节点提升成域控制器
    Azure HPC Pack VM 节点创建和配置
    Azure HPC Pack 部署必要条件准备
    Azure HPC Pack 基础拓扑概述
    Azure VM 性能计数器配置
    Maven私仓配置
  • 原文地址:https://www.cnblogs.com/tianzeng/p/10074007.html
Copyright © 2011-2022 走看看