劍指offer 51 陣列中的逆序對

2021-10-07 07:12:43 字數 953 閱讀 9172

在陣列中的兩個數字如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。

輸入乙個陣列,求出這個陣列中的逆序對的總數。

在陣列[7,5,6,4]中,一共有5個逆序對

分別是(7、5)、(7、6)、(7、4)、(6、4)、(5、4)

直接暴力

class solution 

};

遞迴【歸併排序】

時間復制度:nlogn

我們進行一次歸併排序,並在歸併過程中計算逆序對,換句話說——逆序對是歸併排序的副產物

在合併的過程中,統計逆序數

[1,2,3,4]  [2,5]

i j

------------------------

nums[i] <= nums[j], i++

[1,2,3,4] [2,5]

i j

nums[i] > nums[j]

res = mid -i +1;

// 統計逆序對 (3,2) (4,2)

------------------------

class solution 

}while(i<=mid) temp.push_back(nums[i++]);

while(j<=r) temp.push_back(nums[j++]);

i = l;

for(auto x:temp) nums[i++] =x;

return res;

}int inversepairs(vector& nums)

};

劍指Offer 51 陣列中的逆序對

在陣列中的兩個數字如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。樣例輸入 1,2,3,4,5,6,0 輸出 6 class solution object definversepairs self,nums type nums list in...

劍指offer 51 陣列中的逆序對

這到題的題目為 陣列中的兩個數字如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這兩個陣列中逆序對的總數。解題思路 將陣列分為若干個子陣列,其中每乙個數為乙個子陣列,先統計子陣列內部之間的逆序對,並對它們進行排序。然後統計相鄰兩個子陣列之間的逆序對用於對它們進行排序,直...

劍指offer51 陣列中的逆序對

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數p。並將p對1000000007取模的結果輸出。即輸出p 1000000007 輸入描述 題目保證輸入的陣列中沒有的相同的數字 資料範圍 對於 50的資料,size 10 4對於...