1# - * -コーディング:UTF- 8 - * - 2 クラスのソリューション: 3 DEF __init __(自己): 4 self.cnt = 0 5 self.tmp = [] 6 7 DEF InversePairs(自己、データ): 8 、N = LEN(データ) 9 self.tmp = [ 0 ] * N 10 self.mergeSort(データ、0、N- 1 ) 11 リターン self.cnt%の十億七 12 13 DEFマージ(自己、NUMS、L、H): 14 もしH - L < 1 : 15 リターン 16 のm = 1 +(H - L)// 2 17 self.mergeSort(NUMS、L、M) 18 self.mergeSort(NUMS、M + 1 、H) 19 self.merge(NUMS 、L、M、H) 20 21 DEF(自己、NUMS、L、M、H)マージ: 22 I、J、K = L、M + 1 、L 23 、一方 I <= MまたはJ <=はH: 24 もし I> M: 25 self.tmp [K] = NUMS [j]が 26 J + = 1 27 ELIF J> H: 28 self.tmp [K] = NUMS [I] 29 I + = 1 30 ELIFのNUMS [I] <= NUMS [J]: 31 self.tmp [K] = NUMS [I] 32 iは+ = 1 33 他: 34 self.tmp [K] = NUMS [j]が 35 J + = 1 36 self.cnt + = M - I + 1 37 K + = 1 38 K = L 39 ながら <= KH: 40 NUMS [K] = self.tmp [K] 41 K + = 1 42 ここで#ライトコード
この質問のタイムアウトは、OJはPythonの問題の判断であると言われています。
以下は、Java実装の参照がに提出することができます:
1つの パブリック クラスソリューション{ 2 プライベート ロング CNT = 0 ; 3 プライベート INT [] TMP; // ここで宣言補助アレイの代わりにステートメントマージ()再帰関数 4。 5。 公共 INT InversePairs(INT [] NUMS){ 6。 = TMP 新しい新しい INT [nums.length]; 7。 マージ(NUMS、0、nums.length - 1。); 8。 リターン(INT)(%CNT 十億七); 9。 } 10 11 プライベート ボイドマージ(INT [] NUMS、int型の L、int型H){ 12 であれば(H - L < 1 ) 13 リターン; 14 int型 M = 1 +(H - L)/ 2 。 15 マージ(NUMS、L、M)。 16 マージ(NUMS、M + 1 、H)。 17 マージ(NUMS、L、M、H)。 18 } 19 20 プライベート ボイドマージ(INT [] NUMS、int型の L、INT M、INTH){ 21 INT I = 1、J = M + 1、K = L。 22 一方(I <= M || J <= H){ 23 であれば(I> M) 24 TMP [K] = NUMS [J ++ ]。 25 他の 場合(J> H) 26 [I ++ TMP [K] = NUMS ]。 27 他の 場合(NUMS [I] <= NUMS [J]) 28 TMP [K] = NUMS [I ++ ]。 29 他{ 30 TMP [K] = NUMS [J ++ ]。 31 本.CNT + = M - I + 1。 // NUMS [I]> NUMS [J]、说明NUMS [I ...中間]都大于NUMS [J] 32 } 33 K ++ 。 34 } 35 用(K = L; K <= hの; kは++ ) 36 NUMS [k]は= TMP [k]を、 37 } 38 }