劍指筆記 51 陣列中的逆序對

2021-09-19 22:51:15 字數 737 閱讀 3272

題目:在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,

求出這個陣列中的逆序對的總數p

思路:以下是劍指中的思路。最容易想到是就是順序掃瞄整個陣列,每掃瞄到乙個數字,逐個比較這個數字和它後面數字的大小。這種思路的時間複雜度是

歸併排序的時間複雜度是o(nlogn),比上面提到的方法要快,但是同時歸併排序需要乙個長度為n的輔助陣列,相當於使用o(n)的空間消耗換來了時間效率的提公升,因此是一種空間換時間的演算法。

**:int count = 0;

public  int inversepairs(int array)

public static  void mergesort(int data,int start,int end)

}//start是左陣列第乙個元素的索引,mid是左陣列最後乙個元素的索引,mid+1是右陣列第乙個元素的索引,end是右陣列最後一

//個元素的索引

public static void merge(int data,int start,int mid,int end) else

}//將最後剩的那個元素新增到輔助陣列中

while (start <= mid)

while (index <= end)

//將輔助陣列的元素複製回原始陣列

for (int d : arr)

}

劍指51 陣列中的逆序對

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數p。並將p對1000000007取模的結果輸出。即輸出p 1000000007。示例 輸入 1,2,3,4,5,6,7,0 輸出 7 逆序對的存在表明數字沒有按照順序排列,因此進...

劍指Offer 51 陣列中的逆序對

在陣列中的兩個數字如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。樣例輸入 1,2,3,4,5,6,0 輸出 6 class solution object definversepairs self,nums type nums list in...

劍指offer 51 陣列中的逆序對

這到題的題目為 陣列中的兩個數字如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這兩個陣列中逆序對的總數。解題思路 將陣列分為若干個子陣列,其中每乙個數為乙個子陣列,先統計子陣列內部之間的逆序對,並對它們進行排序。然後統計相鄰兩個子陣列之間的逆序對用於對它們進行排序,直...