[LeetCode] 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 ;
    }
};

おすすめ

転載: blog.csdn.net/Gyangxixi/article/details/114126143