解题思路:
模拟,循环找每行的最小值,再验证该值是否是所在列最大值。
代码:
class Solution {
public:
vector<int> luckyNumbers (vector<vector<int>>& matrix) {
vector<int> ans;
int m = matrix.size(), n = matrix[0].size();
for(int i = 0; i < m; i++)
{
int minnum = matrix[i][0];
int minpos = 0;
for(int j = 1; j < n; j++) //行遍历找最小值,记录坐标
{
if(matrix[i][j] < minnum) {
minnum = matrix[i][j];
minpos = j;
}
}
bool flag = true; //判断该行最小值是否是所在列最大值
for(int k = 0; k < m; k++)
{
if(matrix[k][minpos] > minnum) {
flag = false;
break;
}
}
if(flag) ans.push_back(minnum);
}
return ans;
}
};
时间复杂度O(m×(n+m)),空间复杂度O(1)。