劍指 Offer 51 陣列中的逆序對

2021-10-09 05:23:35 字數 1127 閱讀 7996

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

示例 1:

輸入: [7,5,6,4]

輸出: 5

限制:0 <= 陣列長度 <= 50000

歸併排序,學習了

class solution 

int length = nums.length;

int copyarr = arrays.copyof(nums, length);

int temparr = new int[length];

return countreversepairs(copyarr, 0, length - 1, temparr);

}private int countreversepairs(int nums, int left, int right, int temparr)

int mid = left + (right - left) / 2;

int leftcount = countreversepairs(nums, left, mid, temparr);

int rightcount = countreversepairs(nums, mid + 1, right, temparr);

if (nums[mid] <= nums[mid + 1])

int count = mergeandsort(nums, left, right, temparr);

return count + leftcount + rightcount;

}private int mergeandsort(int nums, int left, int right, int temparr)

int mid = left + (right - left) / 2;

int count = 0;

int i = left, j = mid + 1;

for (int n = left; n <= right; ++n) else if (j > right) else if (temparr[j] < temparr[i]) else

}return count;

}}

劍指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對於...