题目描述
给你一个 m * n 的矩阵,矩阵中的数字 各不相同 。请你按 任意 顺序返回矩阵中的所有幸运数。
幸运数是指矩阵中满足同时下列两个条件的元素:
在同一行的所有元素中最小
在同一列的所有元素中最大
样例
输入:matrix = [[3,7,8],[9,11,13],[15,16,17]]
输出:[15]
解释:15 是唯一的幸运数,因为它是其所在行中的最小值,也是所在列中的最大值。
算法1
(暴力枚举) $O(n^2)$
注意:不能改变原序列的顺序 因为当前行最小值与当前列最大值有可能不会同时存在 返回值为空
C++ 代码
class Solution {
public:
vector<int> luckyNumbers (vector<vector<int>>& m) {
int a= m.size();
int b = m[0].size();
vector<vector<int>> n = m;
vector<int> res(1);
for(int i = 0;i < a;i++)
{
sort(n[i].begin(),n[i].end());
}
for(int i = 0;i < a;i++)
res[0] = max(res[0],n[i][0]);
int c = 0;
for(int i = 0;i < a;i ++)
for(int j = 0;j < b;j ++){
if(m[i][j] == res[0])
c = j;
}
int mc = 0;
for(int i = 0;i < a;i++){
mc = max(mc,m[i][c]);
}
if(mc == res[0]){
return res;
}else{
res.clear();
}
return res;
}
};