leetcode下で(31)に配置され

次の配置

問題解決のアイデア:逆バイナリ検索+の配列

クラスソリューション{
     公共 ボイド nextPermutation(INT [] NUMS){
         int型のlen = nums.length。
        もし(lenが<= 1 ){
             返します
        } 
        int型 i = 0 ;
        以下のための - (; I> 0、I = lenの-1 {I)の
             場合(NUMS [I]> NUMS [I-1 ]){
                 int型端= erfen(NUMS、I、lenの-1、NUMS [I-1 ]); 
                NUMS [I -1] = NUMS [I-1] ^ NUMS [END]。
                NUMS [END] = NUMS [I-1] ^ NUMS [END]。
                NUMS [I-1] = NUMS [I-1] ^ NUMS [END]。
                逆(NUMS、私は、LEN)。
                破ります; 
            } 
        } 
        場合(I == 0 ){ 
            逆(NUMS、 0 、LEN)。
        } 
    } 
    公共 ボイド逆(INT [] NUMSは、int型 Iを、INT LEN){
         int型 LENG = iが+(LEN-I)/ 2 int型、K <LENG; K = iは++ K){ 
            NUMS [K] = NUMS [K] ^ NUMS [lenの-1 ]。
            NUMS [lenは -1] = NUMS [K] ^ NUMS [lenの-1 ]。
            NUMS [K] = NUMS [K] ^ NUMS [lenの-1 ]。
            - LEN; 
        } 
    } 
    公共 のint erfen(INT [] NUMS、int型開始、int型エンド、int型のターゲット){
         int型ミッド= 0 しながら(<=開始{端)
            、中間 =(スタート+エンド)/ 2 もし(ターゲット> = NUMS [中間]){  =ミッド-1 
            } { 
                開始 =ミッド+ 1
            } 
        } 
        戻り端; 
    } 
}

 

おすすめ

転載: www.cnblogs.com/erdanyang/p/11198941.html