在陣列中的兩個數字如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。
輸入乙個陣列,求出這個陣列中的逆序對的總數。
在陣列[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對於...