73.矩阵置零
class Solution {
public void setZeroes(int[][] matrix) {
if(matrix.length < 1 || matrix[0].length < 0) return;
int m = matrix.length, n = matrix[0].length;
// Set<Integer> rows = new HashSet<>();
// Set<Integer> cols = new HashSet<>();
// for(int i = 0; i < m; i++) {
// for(int j = 0; j < n; j++) {
// if(matrix[i][j] == 0) {
// rows.add(i);
// cols.add(j);
// }
// }
// }
// for(int i = 0; i < m; i++) {
// for(int j = 0; j < n; j++) {
// if(rows.contains(i) || cols.contains(j)) matrix[i][j] = 0;
// }
// }
boolean flag = false;
for(int i = 0; i < m; i++) {
if(matrix[i][0] == 0) flag = true; //判断第一列中是否本来就有0
for(int j = 1; j < n; j++) {
if(matrix[i][j] == 0) {
matrix[i][0] = matrix[0][j] = 0;
}
}
}
for(int i = m - 1; i >= 0; i--) {
for(int j = n - 1; j > 0; j--) {
if(matrix[i][0] == 0 || matrix[0][j] == 0) {
matrix[i][j] = 0;
}
}
if(flag) matrix[i][0] = 0; //若为true,则说明第一列本来就有0,则整列都置为0
}
}
}
74.搜索二维矩阵
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
//方法一
// int row = matrix.length - 1;
// int col = 0;
// int n = matrix[0].length;
// while(row >= 0 && col < n) {
// if(target > matrix[row][col]) col++;
// else if(target < matrix[row][col]) row--;
// else return true;
// }
// return false;
//方法二:二分法
int m = matrix.length, n = matrix[0].length;
int left = 0, right = m * n - 1;
while(left <= right) {
int mid = (left + right) / 2;
int row = mid / n;
int col = mid % n;
if(matrix[row][col] < target) left = mid + 1;
else if(matrix[row][col] > target) right = mid - 1;
else return true;
}
return false;
}
}