LeetCode 1380. 矩阵中的幸运数
1380. 矩阵中的幸运数
Solution
思路:自己的思路就是遍历两遍数组,然后另开计数数组,如果同一个位置被计两次,则为幸运数。时间复杂度和空间复杂度都是O(mn)
,看了题解是可以在遍历的时候直接判断的,时间复杂度为O(mn*(m+n)
,空间复杂度为O(1)
,因为不需要另开保存结果。还有一个方法是保存行的最大值和列的最小值,判断数组的值是否与两个都相等。时间复杂度为O(mn)
,空间复杂度为O(m+n)
,因为需要开空间保存行的最大值和列的最小值。
//方法一:
class Solution {
int[][] cnt = new int[50][50];
public List<Integer> luckyNumbers (int[][] matrix) {
int m = matrix.length, n = matrix[0].length;
for (int i = 0; i < m; i++) {
int tmpi = -1, tmpj = -1;
int val = Integer.MAX_VALUE;
for (int j = 0; j < n; j++) {
if (matrix[i][j] < val) {
tmpi = i; tmpj = j;
val = matrix[i][j];
}
}
cnt[tmpi][tmpj]++;
}
for (int i = 0; i < n; i++) {
int tmpi = -1, tmpj = -1;
int val = Integer.MIN_VALUE;
for (int j = 0; j < m; j++) {
if (matrix[j][i] > val) {
tmpi = i; tmpj = j;
val = matrix[j][i];
}
}
cnt[tmpj][tmpi]++;
}
List<Integer> ans = new ArrayList<Integer>();
for (int i = 0; i < 50; i++) {
for (int j = 0; j < 50; j++) {
if (cnt[i][j] > 1) {
ans.add(matrix[i][j]);
}
}
}
return ans;
}
}
//方法二:
class Solution {
public List<Integer> luckyNumbers (int[][] matrix) {
int m = matrix.length, n = matrix[0].length;
List<Integer> ans = new ArrayList<Integer>();
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
boolean isMax = true;
for (int k = 0; k < n; k++) {
if (matrix[i][k] < matrix[i][j]) {
isMax = false;
}
}
if (!isMax) {
continue;
}
boolean isMin = true;
for (int k = 0; k < m; k++) {
if (matrix[k][j] > matrix[i][j]) {
isMin = false;
}
}
if (isMin) {
ans.add(matrix[i][j]);
}
}
}
return ans;
}
}
//方法三
class Solution {
public List<Integer> luckyNumbers (int[][] matrix) {
int m = matrix.length, n = matrix[0].length;
int[] minRow = new int[m];
Arrays.fill(minRow, Integer.MAX_VALUE);
int[] maxCol = new int[n];
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
minRow[i] = Math.min(minRow[i], matrix[i][j]);
maxCol[j] = Math.max(maxCol[j], matrix[i][j]);
}
}
List<Integer> ans = new ArrayList<Integer>();
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (minRow[i] == maxCol[j]) {
ans.add(matrix[i][j]);
}
}
}
return ans;
}
}
埋骨何须桑梓地,人生无处不青山