要求描述:给你一个二维矩阵,每行从左到右递增,每列从上往下递增,给你一个val,让你判断值val是否在该矩阵中出现。
思路:从左下角,或者右上角去判断。如左下角,那么如果左下角的数字比val小,那么说明这一列已经不满足条件(因为从上往下递增),如果左下角的数字比val大,那么说明这一行不满足条件(因为从左往右递增)。
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
class Matrix{
public:
Matrix(){}
// Matrix(int _r,int _c):r(_r), c(_r) {}
void input(){
cin>>r >> c;
for(int i = 0; i < r; i++){
for(int j = 0; j < c; j++){
cin>>mat[i][j];
}
}
cin>>val;
}
bool exist(){
int cc = c;
c = 0;
r--;
while(r >= 0 && c < cc){
if(mat[r][c] == val) return true;
else if(mat[r][c] < val){
c++;
}else if(mat[r][c] > val){
r--;
}
}
return false;
}
~Matrix(){}
private:
int r, c, val;
int mat[50][50];
};
int main(){
Matrix tes;
tes.input();
if(tes.exist()){
cout<<"exist"<<endl;
}else{
cout<<"not exist"<<endl;
}
return 0;
}
/*
4 4
1 2 8 9
2 4 9 12
4 7 10 13
6 8 11 15
7
*/