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;
    }
  • 相关阅读:
    oracle-高级查询
    java-集合框架
    java-String-StringBuffer
    ROS消息, 服务, 主题, 订阅 5
    ROS消息, 服务, 主题, 订阅 4
    ROS消息, 服务, 主题, 订阅 3
    ROS消息, 服务, 主题, 订阅 2
    ROS消息, 服务, 主题, 订阅 1
    可交互的Marker
    RVIZ建Maker
  • 原文地址:https://www.cnblogs.com/tianzeng/p/10074007.html
Copyright © 2011-2022 走看看