題目:
在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。
解題思路:本題最直觀的方法是使用雙重迴圈遍歷陣列,每遍歷乙個值便將其與後面的元素比較,這種解法的演算法複雜度為o(n^2),下面提供一種複雜度為o(n)的演算法,主要是借助歸併排序的思想,先分治,每次合併的時候進行逆序對的計數
public
class solution
public
int mergesort(int array,int low,int high)
return count;
}public
int merge(int array,int low,int middle,int high)
for(i=0,k=middle+1;iarray[k];
}for(i=0,j=0,k=low;iif(l[i]array[k] = l[i];
i++;
}else
}if(i// count = count+n1-i-1;
for(j=i;jarray[k] = l[j];}}
if(jfor(i=j;iarray[k] = r[i];}}
return count;
}}
陣列中的逆序對 java
題目描述 在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數p。並將p對1000000007取模的結果輸出。即輸出p 1000000007 輸入描述 題目保證輸入的陣列中沒有的相同的數字 資料範圍 對於 50的資料,size 1...
劍指offer題解 陣列中的逆序對
題目描述 在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。劍指offer解法,還未理解 public class solution return inversepairsnum array,copy,0,copy.lengt...
陣列中逆序對
題目 在陣列中的兩個數字,如果前面的乙個數字大於後面的數字,則這兩個數字為乙個逆序對。輸入乙個陣列,求這個陣列的逆序對個數。例如 給定陣列 則有 5,3 5,1 8,3 8,1 3,1 這5個逆序對。問題分析 我採用兩種方法來解決這個問題 1 考慮到二叉搜尋樹中每個節點x,它的左子樹所有關鍵字的值小...