題目
求乙個陣列中所有的逆序對數,如陣列arr=,逆序對有5,2; 5,4; 9,8; 9,6; 8,6; 逆序對數為5
分析
因為陣列不是排序的,所以要找乙個元素後面所有比它小的數,最直觀的想法是依次遍歷後續的元素。這樣做的時間複雜度為o(n).
除此之外,涉及兩個元素間相互比較的計算在陣列的排序演算法中最為常見了,歸併排序在合併的時候可以記錄下對比中的逆序對數:
**
1int mergecore(int arr,int small,int mid,int big,int
tmp)
2else
1115}16
17while (i<=mid)
1821
while (j<=mid)
2225
26for (int n=0;n)
2730
31return
rever_num;32}
3334
void mergesort(int arr,int s,int e,int tmp,int&reverse_num)
3540
int mid=s+(e-s)/2;41
mergesort(arr,s,mid,tmp,reverse_num);
42 mergesort(arr,mid+1
,e,tmp,reverse_num);
43 reverse_num+=mergecore(arr,s,mid,e,tmp);
4445}46
47int reversepairnum(int arr,int
len)
4853
54int* tmp=new
int[len];
55int reverse_num=0
;56 mergesort(arr,0,len-1
,tmp,reverse_num);
5758
for (int i=0;i)
5962
63delete
tmp;
64return0;
65 }
演算法題 求陣列的逆序對
在陣列中的兩個數字如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。給你乙個陣列,求出這個陣列中逆序對的總數。概括 如果a i a j 且 i j,a i 和 a j 構成乙個逆序對。樣例 序列 2,4,1,3,5 中,有 3 個逆序對 2,1 4,1 4,3 則返回 3 思路 最簡單的想...
刷題 陣列中的逆序對
在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數p。並將p對1000000007取模的結果輸出。即輸出p 1000000007。用類似歸併排序的思路。coding utf 8 class solution definverse...
51題陣列中的逆序對
題目描述 在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數p。並將p對1000000007取模的結果輸出。即輸出p 1000000007 思路 使用了歸併排序的思想 class solution else if m start...