privatestaticclassSolution{ publicvoidsetZeroes(int[][] matrix){ Set<Integer> cols = new HashSet(); Set<Integer> rows = new HashSet(); for (int i = 0; i < matrix.length; i++) { for (int j = 0; j < matrix[i].length; j++) { if (matrix[i][j] == 0) { cols.add(j); rows.add(i); } } } for (Integer col : cols) { for (int i = 0; i < matrix.length; i++) { matrix[i][col] = 0; } } for (Integer row : rows) { for (int i = 0; i < matrix[row].length; i++) { matrix[row][i] = 0; } } }
// O(1) space的算法 遍历 如果一个数为0 将对应第一行和第一列的值置为0a publicvoidsetZeroes2(int[][] matrix){ int m = matrix.length; int n = matrix[0].length; for (int i = 1; i < m; i++) for (int j = 1; j < n; j++) if (matrix[i][j] == 0) { matrix[i][0] = 0; matrix[0][j] = 0; } // set to zero for (int i = 1; i < m; i++) for (int j = 1; j < n; j++) if (matrix[i][0] == 0 || matrix[0][j] == 0) matrix[i][j] = 0; // 看第一行 和 第一列是否需要置空 boolean isRow = false; boolean isCol = false; for (int i = 0; i < m; i++) { if (matrix[i][0] == 0) isRow = true; } for (int i = 0; i < n; i++) { if (matrix[0][i] == 0) isCol = true; } if (isRow) for (int i = 0; i < m; i++) { matrix[i][0] = 0; } if (isCol) for (int i = 0; i < n; i++) { matrix[0][i] = 0; } }
/** * Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties: * <p> * Integers in each row are sorted from left to right. * The first integer of each row is greater than the last integer of the previous row. */ privatestaticclassSolution{ publicbooleansearchMatrix(int[][] matrix, int target){ int startRow = 0; int endRow = matrix.length - 1; int startCol = 0; int endCol = matrix[0].length - 1;