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:

有时间再补

原文地址:https://www.cnblogs.com/msymm/p/9926742.html