牛客题解 | 矩阵查数_1
题目
题解
题目难度:简单
知识点:数学逻辑、数组
方法一:
思路:
1:将数据输入动态数组matrix中,从左下脚开始遍历,初始行数i=m-1,初始列数j=0。
2:判断现在所在行数i,j=0,即matrix[i][0]与K值进行比较,如果matrix[i][0]>k,由于每行元素值依次增大,所以一定不在该行,i--之后重复第2步。
3.如果matrix[i][0]<k,遍历该行的所有列j,如果存在matrix[i][j]=k,打印true,使用return语句结束程序;当出现matrix[i][j]>k时,表明该行j+1到n列都不会出现matrix[i][j]=k的情况,因此将i--,重复第2步。如果当j=n时未出现上两种情况,需要继续判断上一行,也跳转到第2步。
4.遍历完所有的i时,没有遇到return结束程序语句,即没有出现matrix[i][j]=k,打印false。
时间复杂度O(m+n),空间复杂度O(m*n)
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int m, n, k;
cin >> m >> n;
vector< vector<int> > matrix;
for(int i = 0; i < m; i++) {
vector<int> temp;
for(int j = 0; j < n; j++) {
cin >> k;
temp.push_back(k);
}
matrix.push_back(temp);
}
cin >> k;
for(int i=m-1;i>=0;i--){
if(matrix[i][0]>k) continue;
else{
for(int j=0;j<n;j++){ if(matrix[i][j] cout<<"true"<<endl; return 0; }>k){
break;
}
}
}
}
cout<<"false"<<endl; return 0; } ``` ##方法二:以空间换时间 从题干可知:矩阵中出现的数字与需要查找的数(k)都为0~100000之间的整数。因此我们用一个布尔型数组m,将其大小设置为1000001,矩阵中出现的每一个数字num,将m[num]值设置为true。最后判断需要查找的数k,即m[k]是否为true。如果为true输出true,否者输出false。 ####时间复杂度o(1),空间复杂度o(n) #include <iostream>
using namespace std;
int main(){
int m,n,num;
bool M[100001];
cin>>m>>n;
for(int i=0;i<n;i++) for(int j="0;j<m;j++){" cin>>num;
M[num] = true;
}
int k;
cin>>k;
if(!M[k])
cout<<"false"<</n;i++)></endl;></n;j++){></int></int></vector></iostream></k,遍历该行的所有列j,如果存在matrix[i][j]=k,打印true,使用return语句结束程序;当出现matrix[i][j]>

浙公网安备 33010602011771号