#include <bits/stdc++.h>
using namespace std;
int main(){
int N,M,K;
cin>>N>>M>>K;
vector<vector<int>> Matrix(N,vector<int>(M));
for(int i=0;i<N;i++){
for(int j=0;j<M;j++){
cin>>Matrix[i][j];
}
}
int i=0,j=M-1,res=0;
while(i<N&&j>0){//从每一行的最后一个开始比较,因为矩阵已经排好序,
if(Matrix[i][j]>K)
j--;
else if(Matrix[i][j]<K)//所以每一行最后一个比指定数小的话,这一行肯定都比其小,
i++;//因此直接下移
else{
res=1;
break;
}
}
if(res==1)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
return 0;
} 题目描述
给定一个N \times MN×M的整形矩阵matrix和一个整数K, matrix的每一行和每一列都是排好序的。
实现一个函数,判断K是否在matrix中
[要求]
时间复杂度为O(N+M)O(N+M),额外空间复杂度为O(1)O(1)。
输入描述:
第一行有三个整数N, M, K 接下来N行,每行M个整数为输入的矩阵
输出描述:
若K存在于矩阵中输出"Yes",否则输出"No"
备注:
1 \leqslant N, M \leqslant 10001⩽N,M⩽10000 \leqslant K, \text{矩阵中的数} \leqslant 10^90⩽K,矩阵中的数⩽109

京公网安备 11010502036488号