CareerCup_1_7
2013-06-19 20:03
183 查看
Write an algorithm such that if an element in an MxN matrix is 0, its entire row and column are set to 0.
/* Write an algorithm such that if an element in an MxN matrix is 0, its entire row and column are set to 0. */ const int MAX_INT = 0x7FFFFFFF; void SetMatrixZero(int **matrix, int row, int col); void SetMatrixZero2(int **matrix, int row, int col); void TestSetMatrixZero(); void PrintMatrix2(int **matrix, int row, int col);
#include <iostream> #include "1_7_SetMatrixZero.h" using namespace std; void SetMatrixZero(int **matrix, int row, int col) { for (int i = 0; i < row; ++i) { for (int j = 0; j < col; ++j) { if (matrix[i][j] == 0) { matrix[i][j] = MAX_INT; } } } for (int i = 0; i < row; ++i) { for (int j = 0; j < col; ++j) { if (matrix[i][j] == MAX_INT) { // the same row for (int k = 0; k < col; ++k) { if (matrix[i][k] != MAX_INT) { matrix[i][k] = 0; } } // the same col for (int k = 0; k < row; ++k) { if (matrix[k][j] != MAX_INT) { matrix[k][j] = 0; } } matrix[i][j] = 0; } } } } void TestSetMatrixZero() { int row = 4; int col = 3; int **matrix = new int *[4]; for (int i = 0; i < row; ++i) { matrix[i]= new int[3]; } for (int i = 0; i < row; ++i) { for (int j = 0; j < col; ++j) { matrix[i][j] = i + j + 1; } } matrix[1][1] = 0; //matrix[2][2] = 0; PrintMatrix2(matrix, 4, 3); SetMatrixZero2(matrix, 4, 3); PrintMatrix2(matrix, 4, 3); for (int i = 0; i < row; ++i) { delete []matrix[i]; } delete[] matrix; } void PrintMatrix2(int **matrix, int row, int col) { for (int i = 0; i < row; ++i) { for (int j = 0; j < col; ++j) { printf("%4d", matrix[i][j]); } cout << endl; } cout << endl; } void SetMatrixZero2(int **matrix, int row, int col) { bool *rowFlag = new bool[row]; bool *colFlag = new bool[col]; memset(rowFlag, 0, sizeof(bool) * row); memset(colFlag, 0, sizeof(bool) * col); for (int i = 0; i < row; ++i) { for (int j = 0; j < col; ++j) { if (matrix[i][j] == 0) { rowFlag[i] = true; colFlag[j] = true; } } } for (int i = 0; i < row; ++i) { if (rowFlag[i]) { for (int k = 0; k < col; ++k) { matrix[i][k] = 0; } } } for (int i = 0; i < col; ++i) { if (colFlag[i]) { for (int k = 0; k < row; ++k) { matrix[k][i] = 0; } } } delete[]rowFlag; delete[]colFlag; }
相关文章推荐
- Moderate 猜测序列hit或是pseudo-hit @CareerCup
- Hard 大文本找两个单词最短距离 @CareerCup
- CareerCup Find the smallest range that includes at least one number from each of the k sorted lists.
- CareerCup Number of ways to take n identical objects out of a bucket
- CareerCup calculate (x^y)%z without pow();
- CareerCup Find all the conflicting appointments from a given list of n appointments.
- CareerCup View from the left and the right
- CareerCup Generate all the possible substrings
- CareerCup Median of three numbers
- CareerCup之1.6 Rotate Image
- careercup-C和C++ 13.6
- careercup top 150判断字符串中字符是否唯一(字符不重复)
- Moderate 找最小排序区间 @CareerCup
- Hard 找到由其它单词组成的最长单词 @CareerCup
- CareerCup Find the ceiling value present in the BST of a given ke
- Arrays_Strings 判断字符串中的字符是否唯一@CareerCup
- CareerCup Binary Tree the Maximum of 人
- CareerCup Find the representation as a tree with the least height
- CareerCup Liars Merge-Find Set
- CareerCup Given a dictionary, how would you add spaces in this string