次の配置
問題解決のアイデア:逆バイナリ検索+の配列
クラスソリューション{ 公共 ボイド 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。 } } 戻り端; } }