5356. 矩阵中的幸运数
给你一个 m * n 的矩阵,矩阵中的数字 各不相同 。请你按 任意 顺序返回矩阵中的所有幸运数。
幸运数是指矩阵中满足同时下列两个条件的元素:
在同一行的所有元素中最小
在同一列的所有元素中最大
思路:fun1找出每行最小值, fun2找出每列最大值。 合并。
class Solution {
public:
vector<int> luckyNumbers (vector<vector<int>>& matrix) {
fill(flag1[0], flag1[0]+51*51, false);
fill(flag2[0], flag2[0]+51*51, false);
fun1(matrix);
fun2(matrix);
vector<int> res;
for(int i=0;i<matrix.size();i++){
for(int j=0;j<matrix[0].size();j++){
if(flag1[i][j]==true && flag2[i][j]==true)
res.push_back(matrix[i][j]);
}
}
return res;
}
private:
bool flag1[51][51], flag2[51][51];
void fun1(vector<vector<int>>& matrix){
for(int i=0;i<matrix.size();i++){
int min_id=0;//找每行的最小值
int m=100005;
for(int j=0;j<matrix[0].size();j++){
if(m>matrix[i][j]){
min_id=j;
m=matrix[i][j];
}
}
flag1[i][min_id]=true;
}
}
void fun2(vector<vector<int>>& matrix){
for(int j=0;j<matrix[0].size();j++){
int max_id=0;//找每列的最大值
int m=0;
for(int i=0;i<matrix.size();i++){
if(m<matrix[i][j]){
max_id=i;
m=matrix[i][j];
}
}
flag2[max_id][j]=true;
}
}
};