LeetCode 面試題4 二維陣列中的查詢
阿新 • • 發佈:2020-10-31
題目描述
在陣列中的兩個數字,如果前面一個數字大於後面的數字,則這兩個數字組成一個逆序對。輸入一個數組,求出這個陣列中的逆序對的總數P。並將P對1000000007取模的結果輸出。 即輸出P%1000000007輸入描述:
題目保證輸入的陣列中沒有的相同的數字
資料範圍:
對於%50的資料,size<=10^4
對於%75的資料,size<=10^5
對於%100的資料,size<=2*10^5
示例1輸入
[1,2,3,4,5,6,7,0]
返回值
7
剛開始的演算法,由於遞迴涉及到大量重複計算的問題,使得執行超時
class Solution { public: int InversePairs(vector<int> data) { if(data.size()==0) return 0; int len = data.size(); int * array = new int[len]; //memset(array, 0, data.size()*sizeof(array)); for(int i=0;i<len;i++){ array[i] = 0; } divideInversePairs(data,0,data.size()-1,array);int sum = 0; for(int i = 0;i<len;i++){ sum += array[i]; } return sum%1000000007; } void CombineInversePairs(vector<int> data,int low,int mid, int high,int array[]){ for(int i = low;i<=mid;i++){ for(int j=mid+1;j<=high;j++){ if(data[i]>data[j]) array[i]++; } } } void divideInversePairs(vector<int> data,int low, int high,int array[]){ if(low<high){ int mid = low + (high - low)/2; divideInversePairs(data, low, mid, array); divideInversePairs(data, mid+1, high, array); CombineInversePairs(data,low,mid,high,array); } } };