劍指offer 51 陣列中的逆序對

2021-09-17 21:00:26 字數 1085 閱讀 2716

這到題的題目為:陣列中的兩個數字如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這兩個陣列中逆序對的總數。

解題思路:將陣列分為若干個子陣列,其中每乙個數為乙個子陣列,先統計子陣列內部之間的逆序對,並對它們進行排序。然後統計相鄰兩個子陣列之間的逆序對用於對它們進行排序,直到整個陣列有序則你秀陣列統計完畢(如下圖):

**如下:

#include#includeint  inverseparis2(int *data, int *copy, int start, int end)

int length = (end - start) / 2;

int left = inverseparis2(copy, data, start, start + length);

int right = inverseparis2(copy, data, start + length + 1, end);

int i = start + length;

int j = end;

int indexcopy = end;

int count = 0;

while (i >= start&&j >= start + length + 1)

else

} for (; i >= start; --i)

copy[indexcopy--] = data[i];

for (; j >= start + length + 1; --j)

copy[indexcopy--] = data[j];

return left + right + count;

}int inverseparis(int *data, int length)

int count = inverseparis2(data, copy, 0, length - 1);

free(copy);

copy = null;

return count;

}

劍指Offer 51 陣列中的逆序對

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

劍指offer51 陣列中的逆序對

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

劍指offer 51 陣列中的逆序對

在陣列中的兩個數字如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。在陣列 7,5,6,4 中,一共有5個逆序對 分別是 7 5 7 6 7 4 6 4 5 4 直接暴力 class solution 遞迴 歸併排序 時間復制度 nlogn 我們...