剑指offer之【数组中的逆序对】
生活随笔
收集整理的這篇文章主要介紹了
剑指offer之【数组中的逆序对】
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
題目:
數(shù)組中的逆序?qū)?/p>
鏈接:
https://www.nowcoder.com/practice/96bd6684e04a44eb80e6a68efc0ec6c5?tpId=13&tqId=11188&tPage=2&rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
題目描述:
在數(shù)組中的兩個數(shù)字,如果前面一個數(shù)字大于后面的數(shù)字,則這兩個數(shù)字組成一個逆序?qū)Α]斎胍粋€數(shù)組,求出這個數(shù)組中的逆序?qū)Φ目倲?shù)P。并將P對1000000007取模的結(jié)果輸出。 即輸出P%1000000007?
思路:
受歸并排序算法的啟發(fā),比較前后兩段數(shù)組的大小,并計算逆序數(shù);
代碼:
1 class Solution { 2 public: 3 int InversePairs(vector<int> data){ 4 int len = data.size(); 5 res =0; 6 if(len <= 0) 7 return 0; 8 vector<int> da = data; 9 MergeSort(data,da,0,len-1); 10 res = res%1000000007; 11 return res; 12 } 13 void MergeSort(vector<int> &data,vector<int> &data1, int l , int h){ 14 int mid; 15 if(l == h){ 16 data1[l] = data[l]; 17 } 18 else{ 19 mid = (l+h)/2; 20 MergeSort(data1,data,l,mid); 21 MergeSort(data1,data,mid+1,h); 22 Merge(data,data1,l,mid,h); 23 } 24 } 25 void Merge(vector<int> &data,vector<int> &data1, int l, int m, int h){ 26 int i,j,k; 27 for(i = l,j= m+1;i <= m && j<= h; ++l){ 28 if(data[i] < data[j]){ 29 data1[l] = data[i++]; 30 } 31 else{ 32 data1[l] = data[j++]; 33 res += (m-i+1); 34 res = res%1000000007; 35 } 36 } 37 if(i<=m){ 38 for(k=0;k<=m-i;++k){ 39 data1[l+k] = data[i+k]; 40 } 41 } 42 if(j <= h){ 43 for(k=0;k<= h-j;++k){ 44 data1[l+k] = data[j+k]; 45 } 46 } 47 } 48 private: 49 int res; 50 };
?
轉(zhuǎn)載于:https://www.cnblogs.com/wangshujing/p/6943440.html
總結(jié)
以上是生活随笔為你收集整理的剑指offer之【数组中的逆序对】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python基础之01数据类型-变量-运
- 下一篇: 关于java中的集合如何删除一个元素。