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

     题目:

     思路:

    解法1:  vector数组下标遍历(从左下角开始)复杂度O(m+n)  (最优解)

    解法2: 数组遍历(从右上角开始)复杂度O(m*n)

    解法3: vector迭代器遍历

    解法1:

    #include <iostream>
    #include<vector>
    using namespace std;
    
    
    
    void print(vector<vector<int> > array){
        for(int i=0;i<array.size();i++){
            for(int j=0;j<array[0].size();j++){
                cout<<array[i][j]<<" ";//空格
            }
            cout<<endl;
        }
    }
    
    
    class Solution {
    public:
        bool Find(int target, vector<vector<int> > array) {
            //使用数组下标的方式遍历
            //int row, col;
            bool find = false;
            int row = (int)array.size()-1;
            int col = (int)array[0].size()-1;
            int i = row;
            int j = 0;
            while(i>=0 && j<=col){
                if(target < array[i][j]){
                    i--;
                    continue;
                }
                if(target > array[i][j]){
                    j++;
                    continue;
                }
                if(target == array[i][j]){
                    find = true;
                    break;
                }
            }
            return find;
            
        }
    };
    
    
    int main(){
        vector<vector<int> > array;
        vector<int> v;
        int n,temp,target;
        
        cin>>target>>n;
        array.clear();
        
        //input 待优化
        for(int i=0;i<n;i++){
            v.clear();
            for(int j=0;j<n;j++){
                cin>>temp;
               // if(getchar()=='
    ') break;
                v.push_back(temp);
            }
            array.push_back(v);
        }
        
        //output
        print(array);
        Solution s;
        bool m = s.Find(target, array);
        return m;
    
    
    }

    解法2:

    class Solution {
    public:
        bool Find(int *matrix, int row, int col, int target) {
            //数组行列获取方法:row = sizeof(array)/sizeof(array[0]);
            //               col = sizeof(array[0]/sizeof(array[0][0]));
            //使用数组方法遍历
            bool find = false;
            if(matrix != NULL && row>0 && col>0){
                int i = 0;
                int j = col;
                while(i<row && j>col){
                    if(matrix[row*col+j] == target){
                        find = true;
                        break;
                    }
                    else if(matrix[row*col+j] > target) --j;
                    else ++i;
                }
            }
            return find;
            
        }
     
    };

    解法3:

    有时间再补

  • 相关阅读:
    关于“jdk”版本不支持问题的总结
    Linux系统下jdk卸载安装、配置
    weblogic-jdk 问题
    MCU有哪些复位因素
    MCU固件升级(OTA)的几种Flash划分方式
    003_Linux常用命令之文件操作
    002_Linux常用命令之目录操作
    001_Linux常用命令之ls命令
    dup与dup2函数
    Linux 系统查询机器最近重启时间命令
  • 原文地址:https://www.cnblogs.com/msymm/p/9926742.html
Copyright © 2011-2022 走看看