给你一个 m x n 的矩阵,矩阵中的数字 各不相同 。请你按 任意 顺序返回矩阵中的所有幸运数。幸运数 是指矩阵中满足同时下列两个条件的元素:在同一行的所有元素中最小,在同一列的所有元素中最大.写出c++代码并附有注释
时间: 2024-10-18 07:09:13 浏览: 29
```cpp
#include <vector>
#include <algorithm> // 用于max_element和min_element函数
class Solution {
public:
std::vector<int> findLucky(std::vector<std::vector<int>>& matrix) {
std::vector<int> lucky_numbers; // 存储幸运数的向量
for (int i = 0; i < matrix.size(); ++i) { // 遍历每一行
int row_min = *std::min_element(matrix[i].begin(), matrix[i].end()); // 找到行内的最小值
for (int j = 0; j < matrix[0].size(); ++j) { // 遍历每一列
if (matrix[j][i] == row_min && matrix[j][i] == *std::max_element(&matrix[j][0], &matrix[j][i + 1])) { // 如果元素既是行内的最小值又是列内的最大值
lucky_numbers.push_back(matrix[j][i]); // 添加到幸运数列表中
}
}
}
return lucky_numbers; // 返回所有找到的幸运数
}
};
// 示例:
// matrix = [[3,7,8],[9,11,13],[15,16,17]]
// 返回:[15]
```
在这个C++代码中,我们首先创建了一个`Solution`类,并在其中定义了一个名为`findLucky`的公共成员函数,它接收一个二维整数矩阵作为输入。然后,我们遍历矩阵的每一行(`for (int i ...)`),找出每行的最小值。接着,对每一列进行内层循环(`for (int j ...)`),检查当前元素是否既是该行的最小值也是该列的最大值。如果是,则将其添加到`lucky_numbers`向量中。最后,函数返回这个包含所有幸运数的向量。
阅读全文