leetcode-1053。前の配置を交換

  件名の説明:

  あなたの正の整数アレイ与える  A(全く異なる要素でなくてもよい)は、最初の交換(2つの数の交換に戻ることができる  A[i]と  A[j] プレス辞書式順序は以下であるの後に得られた位置)  A 最大の可能な構成。

あなたがように動作することができない場合は、元の配列に戻ってください。

例1:

入力:[3,2,1] 
出力:[3,1,2] 
説明:
交換機1と2

例2:

入力:[1,1,5] 
出力:[1,1,5] 
説明:
これは最小構成であります

例3:

入力:[1,9,4,6,7] 
出力:[1,7,4,6​​,9] 
説明:
交換機9と7 

アイデア:
配列A(A.size()= N) 、後方に[i]は<a [i -1] iは(i>の最初のを見つける前に横断0、a)は、次の番号にインデックスiがN-1未満に見出される戻り、説明を調整する方法を見つけることができませんでし[I-1]の最大値max、インデックスiがN-1は、第1のスイッチングmaxの数に等しい、J、[j]を交換すると[I-1]。

C ++:
クラス解決{
 パブリック
    ベクトル < INT > prevPermOpt1(ベクトル< INT >&A){
         場合(A.size()== 1を返します以下のためにint型 I = A.size() - 1 ; I> 0 ; i-- ){
             場合([i]が<A [I - 1 ]){
                 int型の最大値= A [i]は、
                int型、J <A.size(); J = J ++ ){
                     場合([J] <[I - 1] &&マックス<[J])MAX = A [J]。
                } 
                のためのint型 J = I; J <A.size(); J ++ ){
                     場合([J] == max)は{ 
                        [j]は = [I - 1 ]。
                        [I - 1 ] = maxに。
                        返します
                    } 
                } 
            } 
        } 
        を返します
    } 
}。
 

  パイソン:

クラスのソリューション:
     DEF - >:prevPermOpt1(一覧の[int]は自己、A)一覧[INT]:
         場合 lenは(A)== 1:   リターンA
          I における範囲(LEN(A)-1,0、-1 ) :
             もし [I] <A [I-1 ]:
                最大値 = A [i]の
                 ための J における範囲(I、LEN(A)):
                     もし [J] <[I-1] 及び最大< [ J]:
                        最大 = A [J]
                 のための J における範囲(I、LEN(A))。
                    場合は、[J] == 最大[j]は [I-1 = ] 
                        A [I -1] = 最大が
                         返すリターン Aを

  C ++のランタイム提出以上の90.57パーセント、最速のソリューション112ms、コードされ、152ミリ秒:

クラス解決{
 パブリック
    ベクトル < INT > prevPermOpt1(ベクトル< INT >&A){
         int型の長さ= A.size()。
        場合(長さ<= 1 ){
             返します
        } 
        int型フラグ= int型 I = 1 ;
        int型のインデックス= - 1 ;
        一方(iは< 長さ){
             場合([I] <[I - 1 ]){ 
                インデックス = I -1 ; 
            } 
            私は ++します; 
        } 
        もし(!インデックス= - 1 ){
             int型 swapIndex =指数+ 1 INT maxTemp = A [インデックス+ 1 ]。
            INT J =指数+ 1、J <長あり、j ++ ){
                 場合([J] <[インデックス] && A [J]> maxTemp){ 
                    maxTemp = A [J]。
                    swapIndex = J; 
                } 
            }
            [swapIndex] =[インデックス]。
            [インデックス] = maxTemp。
        } 
        を返します
    } 
}。

 

 

おすすめ

転載: www.cnblogs.com/nibolyoung/p/10948175.html