Java 求解陣列中的逆序對

2021-07-10 19:27:08 字數 695 閱讀 7038

題目:

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。
解題思路:本題最直觀的方法是使用雙重迴圈遍歷陣列,每遍歷乙個值便將其與後面的元素比較,這種解法的演算法複雜度為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,它的左子樹所有關鍵字的值小...