在C++中删除O(n)中的结合NxN矩阵的行和列,可以通过以下步骤实现:
下面是完整的代码示例:
#include <iostream>
#include <vector>
void deleteRowAndColumn(std::vector<std::vector<int>>& matrix) {
int n = matrix.size();
std::vector<bool> deleteRow(n, false);
std::vector<bool> deleteColumn(n, false);
// 标记需要删除的行和列
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (matrix[i][j] == 0) {
deleteRow[i] = true;
deleteColumn[j] = true;
}
}
}
// 删除标记为true的行和列
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (deleteRow[i] || deleteColumn[j]) {
matrix[i][j] = 0;
}
}
}
}
int main() {
std::vector<std::vector<int>> matrix = {{1, 2, 3}, {4, 0, 6}, {7, 8, 9}};
std::cout << "原始矩阵:" << std::endl;
for (const auto& row : matrix) {
for (int num : row) {
std::cout << num << " ";
}
std::cout << std::endl;
}
deleteRowAndColumn(matrix);
std::cout << "删除行和列后的矩阵:" << std::endl;
for (const auto& row : matrix) {
for (int num : row) {
std::cout << num << " ";
}
std::cout << std::endl;
}
return 0;
}
这段代码中,我们首先创建了两个布尔类型的数组deleteRow
和deleteColumn
,用于标记需要删除的行和列。然后,我们遍历整个矩阵,如果某个元素为0,则将对应的行和列的标记设置为true。最后,再次遍历整个矩阵,如果某行或某列的标记为true,则将该行和列的所有元素都设置为0。
这样,就能在O(n)的时间复杂度内删除结合NxN矩阵的行和列。
注意:以上代码仅为示例,实际应用中可能需要根据具体情况进行适当的修改和优化。
推荐的腾讯云相关产品:腾讯云云服务器(CVM)和腾讯云数据库(TencentDB)。您可以通过以下链接了解更多信息:
领取专属 10元无门槛券
手把手带您无忧上云