问题描述:
给你一个 m * n 的矩阵,矩阵中的数字 各不相同 。请你按 任意 顺序返回矩阵中的所有幸运数。
幸运数是指矩阵中满足同时下列两个条件的元素:
在同一行的所有元素中最小
在同一列的所有元素中最大
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/lucky-numbers-in-a-matrix
题目理解:
找到满足一行中最小,一列中最大的二维数组元素;
解题思路:
首次,最外层循环控制结束,同时根据行数不断找出当前行的最小值,记录最小值对应的列索引,根据列索引,保持列不动,再次根据行进行搜索,找到这一列中最大值,这样就求出了当前行的最小值,以及当前列的最大值,如果这两个值相等,则这个数就是要求的幸运数字之一,将其加入到集合中,再次进入循环,直到外层的循环体结束,集合中的值即为所求。
java 代码如下:(无主类)
public List<Integer> luckyNumbers (int[][] matrix) {
// 记录行列的长度
int rows = matrix.length;
int cols = matrix[0].length;
// 用来接收结果的集合
List<Integer> result = new ArrayList<Integer>();
// 用来记录列的索引,不需要行的索引
int colindex = 0;
// 根据行数进行循环查找
for(int i = 0;i < rows;i++){
// 初始化默认每行的第一个元素为最小值,后续更新该值
int min = matrix[i][0];
for(int j = 0;j < cols;j++){
// 控制行数不动,遍历列,求出该行的最小值
min = Math.min(min,matrix[i][j]);
if(min==matrix[i][j]){
// 记录每行最小值所在的列数,用于控制着列数不动,找出该列的最大值
colindex = j;
}
}
// 定义这列第一个元素为最大值,后续更新
int max = matrix[0][colindex];
// 从0行开始,遍历找出该列的最大值
for(int t = 0;t < rows;t++){
max = Math.max(max,matrix[t][colindex]);
}
// 如果一次大的循环找到的最大值和最小值相等,这样就满足了在一行中最小,一列中最大
if(max==min){
// 将满足条件的值加入到集合中
result.add(max);
}
}
return result;
}
感谢观看