题目

  给你一个m*n的矩阵,矩阵中的数字各不相同 。请你按任意顺序返回矩阵中的所有幸运数。来源:力扣(LeetCode)

幸运数是指矩阵中满足同时下列两个条件的元素:

  • 在同一行的所有元素中最小
  • 在同一列的所有元素中最大

解答

方案一

  m*n的int数组,找出每一行的最小值,然后再找出每一行的最大值;对比这两个值列,只要其索引位置相同(即是同一个位置的数),就说明该数是幸运数,即可输出!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public List<Integer> luckyNumbers (int[][] matrix) {
List<Integer> res = new Linkedlist<Integer>();
// 获取数组大小
int m = matrix.length;
int n = matrix[0].length;
int[] rowMin = new int[m]; // 行最小值
Arrays.fill(rowMin, Integer.MAX_VALUE); // 填充最大值,此行必不能少
int[] rowMax = new int[n]; // 列最大值
for(int i = 0; i < m; i++) {
for(int j = 0; j < n; j++) {
if(rowMin[i] > matrix[i][j]){
rowMin[i] = matrix[i][j];
}
if(rowMax[j] < matrix[i][j]){
rowMax[j] = matrix[i][j];
}
}
}

for(int i = 0; i < m; i++) {
for(int j = 0; j < n; j++) {
if(matrix[i][j] == rowMin[i] && matrix[i][j] == rowMax[j]){
res.add(matrix[i][j]);
}
}
}

return res;
}