5356.矩阵中的幸运数 (Easy)*
题目描述*
给你一个 m * n 的矩阵,矩阵中的数字 各不相同 。请你按 任意 顺序返回矩阵中的所有幸运数。
幸运数是指矩阵中满足同时下列两个条件的元素:
在同一行的所有元素中最小,在同一列的所有元素中最大。
提示*
m == mat.length, n == mat[i].length, 1 <= n, m <= 50, 1 <= matrix[i][j] <= 10^5
矩阵中的所有元素都是不同的
代码*
直接暴力就行,当然,菜鸡的暴力和带哥的暴力还是不一样的。
class Solution {
public:
vector<int> luckyNumbers (vector<vector<int>>& matrix) {
int m = matrix.size();
int n = matrix[0].size();
vector<int> res;
// 统计每行最小的数
for(int i = 0; i < m; i++) {
int minColIndex = findMinInRow(matrix, i);
if(i == findMaxInCol(matrix, minColIndex)) {
res.push_back(matrix[i][minCol]);
}
}
return res;
}
// 找到 row 行最小数的列下标
int findMinInRow(vector<vector<int>>& matrix, int row) {
int minIndex = 0;
for(int i = 1; i < matrix[0].size(); i++) {
if(matrix[row][minIndex] > matrix[row][i]) {
minIndex = i;
}
}
return minIndex;
}
// 找到 col 行最大数的行下标
int findMaxInCol(vector<vector<int>>& matrix, int col) {
int maxIndex = 0;
for(int i = 1; i < matrix.size(); i++) {
if(matrix[i][col] > matrix[maxIndex][col]) {
maxIndex = i;
}
}
return maxIndex;
}
};
class Solution {
public:
vector<int> luckyNumbers (vector<vector<int>>& matrix) {
vector<int> res;
int m = matrix.size(), n = matrix[0].size();
vector<int> minForRows(m, INT_MAX);
vector<int> maxForCols(n, 0);
for(int i = 0; i < m; i++) {
for(int j = 0; j < n; j++) {
if(minForRows[i] > matrix[i][j]) {
minForRows[i] = matrix[i][j];
}
if(maxForCols[j] < matrix[i][j]) {
maxForCols[j] = matrix[i][j];
}
}
}
for(int i = 0; i < m; i++) {
for(int j = 0; j < n; j++) {
if(matrix[i][j] == minForRows[i] && matrix[i][j] == maxForCols[j]) {
res.push_back(matrix[i][j]);
}
}
}
return res;
}
};
最后更新: July 23, 2022