題目地址:
https://leetcode.com/problems/lucky-numbers-in-a-matrix/
給定一個二維矩陣,求其中所有滿足其爲所在行最小值且爲所在列最大值的數。可以先找到每一行的最小值和每一列的最大值,然後再把符合條件的數挑出來即可。代碼如下:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Solution {
public List<Integer> luckyNumbers (int[][] matrix) {
List<Integer> res = new ArrayList<>();
// mins[i]是第i行的最小值,maxs[i]是第j行的最大值
int[] mins = new int[matrix.length], maxs = new int[matrix[0].length];
Arrays.fill(mins, Integer.MAX_VALUE);
Arrays.fill(maxs, Integer.MIN_VALUE);
int s = 0, t = 0;
while (s < matrix.length || t < matrix[0].length) {
// 求第s行的最小值
if (s < matrix.length) {
for (int i = 0; i < matrix[0].length; i++) {
mins[s] = Math.min(mins[s], matrix[s][i]);
}
s++;
}
// 求第t列的最大值
if (t < matrix[0].length) {
for (int i = 0; i < matrix.length; i++) {
maxs[t] = Math.max(maxs[t], matrix[i][t]);
}
t++;
}
}
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[0].length; j++) {
if (matrix[i][j] == mins[i] && matrix[i][j] == maxs[j]) {
res.add(matrix[i][j]);
}
}
}
return res;
}
}
時間複雜度,空間。