leetcode73マトリックスゼロ

 

 https://leetcode-cn.com/problems/set-matrix-zeroes/

回答:

両方の方法は、時間計算量はO(MN)であります

O(M + N)スペース方法:

0二つの容器で行と列として格納され

クラス解決{
 パブリックボイド setZeroes(ベクトル<ベクトル< INT >>&行列){
         // O(M + N)额外空间、常数空间??? 
        セット < 整数 > RSE、CSE。
        INT R = matrix.size()。INT C =行列[ 0 ] .size()。
        以下のためにINT iが= 0 ; I <Rを、I ++ ){
             ためINT J = 0 ; J <C; J ++ ){
                 場合(行列[I] [J] == 0 ){ 
                    rse.insert(I)。
                    cse.insert(J)。
                } 
            } 
        } 
        ながら(!{rse.empty())、
             int型温度= * rse.begin()。
            int型 J = 0 ; J <C; J ++ ){ 
                行列[TEMP] [j] = 0 ; 
            } 
            rse.erase(rse.begin())。
        } 
        ながら(!{cse.empty())、
             int型温度= * cse.begin()。
            以下のためにINT iが= 0 ; I <Rを、I ++ ){ 
                行列[I] [TEMP] = 0 ; 
            } 
            cse.erase(cse.begin())。
        } 
        
        
    } 
}。

 

一定の空間方法:

最初の行0、列0用のデータ0の場合は、フラグisrow =真、iscol = TRUEが記録され、0です。

m行および列のデータ1〜1〜nが0であれば、それは、行0、列0でマークされている、すなわち

I:1〜M- 1 
    J:   1〜N- 1 
        であれば(行列[I] [J] == 0 
            行列[I] [ 0 ] = 0、行列[ 0 ] [j] = 0 ;

 

C ++コード:

クラス解決{
 パブリックボイド setZeroes(ベクトル<ベクトル< INT >>&行列){
         // 一定の空間ソリューション
        
        // フラグ0行0番目の列が0かどうかである。
        BOOL IsRow = falseにBOOL iscol = falseにINT = R&LT matrix.size();
         int型 C =行列[ 0 ] .size(); 
        
        のためのINT J = 0 ; J <C; J ++ ){
             IF(行列[ 0 ] [J] == 0 ){ 
                IsRow =trueにBREAK ; 
            } 
        } 
        のためのINT I = 0 ; I <R&LT; I ++ ){
             IF(行列[I] [ 0 ] == 0 ){ 
                iscol = trueにBREAK ; 
            } 
        } 
        
        // フラグ欄は1〜N ;結果は、第0行0番目の列に配置され、0である
        ためINT I = 1 ; I <R&LT; I ++ ){
             ためINT J = 1。 ; J <C; J ++ ){
                 IF(行列[I] [ J] ==0 ){ 
                    行列[I] [ 0 ] = 0 ; 
                    行列[ 0 ] [J] = 0 ; 
                } 
            } 
        } 
        
        // 最初の選択肢は、1〜n個の値をランク付け
        するためのINT I = 1 ; I <R&LT; I ++ ) {
             IF(行列[I] [ 0 ] == 0 ){
                 ためINT J = 0 ; J <C; J ++ ){ 
                    行列[I] [J] = 0 ; 
                } 
            }
        } 
        のためのint型、J = 1、J <C; J ++ ){
             場合(行列[ 0 ] [j] == 0 ){
                 ためINT iは= 0 ; I <R、I ++ ){ 
                    行列[I] [J] = 0 ; 
                } 
            } 
        } 
        // 再替换0行和0列
        場合(isrow){
             ためのint型 J = 0 ; J <C; J ++ ){ 
                行列[ 0 ] [j] = 0 ;
            } 
        }
        もし{(iscol)
             のためのINTは iが= 0を I ++; I <R {)
                行列[I] [ 0 ] = 0 ; 
            } 
        } 
    } 
}。

 

おすすめ

転載: www.cnblogs.com/joelwang/p/11896781.html