题目:
思路:
解法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:
有时间再补