1380.マトリックス内のラッキーナンバー(C ++)
1つのトピックの説明
m * n行列を与えます。行列の数は異なります。マトリックス内のすべてのラッキーナンバーを任意の順序で返してください。
ラッキーナンバーとは、次の2つの条件を満たすマトリックス内の要素を指します。
- 同じ行のすべての要素の中で最小
- 同じ列のすべての要素の中で最大
2説明例
2.1例1
入力:行列= [[3,7,8]、[9,11,13]、[15,16,17]]
出力:[15]
説明:15は行にあるため、唯一のラッキーナンバーです。 valueは、列の最大値でもあります。
2.2例2
入力:matrix = [[1,10,4,2]、[9,3,8,7]、[15,16,17,12]]
出力:[12]
説明:12が唯一のラッキーナンバーです。これは、行の最小値と列の最大値です。
2.3例3
入力:行列= [[7,8]、[1,2]]
出力:[7]
3問題解決のヒント
m == mat.length
n == mat [i] .length
1 <= n、m <= 50
1 <= matrix [i] [j] <= 10 ^ 5
行列内のすべての要素が異なります
4問題解決のアイデア
最初に最小の行を解き、最小の行の下で、列が最大であると判断してから、一致する番号をインポートできます。
5詳細なソースコード(C ++)
class Solution {
public:
vector<int> luckyNumbers (vector<vector<int>>& matrix) {
vector<int> res ;
for ( int i = 0 ; i < matrix.size() ; i ++ )
{
int min = matrix[i][0] ; //保存一个一行最小的数
int index = 0 ; //一行最小数的下标
//找行最小
for ( int j = 1 ; j < matrix[i].size() ; j ++ )
{
if ( min > matrix[i][j] )
{
min = matrix[i][j] ;
index = j ;
}
}
//判断是否是该列的最大值
int flag = 1 ; //0表示不是,1表示是,flag判断的是是否是该列最大值
for ( int j = 0 ; j < matrix.size() ; j ++ )
{
if ( matrix[j][index] > min )
{
flag = 0 ;
break ;
}
}
if ( flag == 1 )
{
res.push_back(min) ;
}
}
return res ;
}
};