題目描述
在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數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
long
long inversepairscore(vector
&data,vector
©,int start,int end)
int length=(end-start)/2;
//通過歸併的方式對左半部和右半部,分別排序,得到兩個排序後的陣列
//因為是引用傳參
long
long left=inversepairscore(copy,data,start,start+length);
long
long right=inversepairscore(copy,data,start+length+1,end);
int i=start+length;
int j=end;
int indexcopy=end;//指向copy陣列的元素,初始化是最後乙個元素
long
long count=0;//用於儲存左側比右側陣列高的逆序對兒的數量
while(i>=start&&j>=start+length+1)
else
}for(;i>=start;i--)
copy[indexcopy--]=data[i];
for(;j>=start+length+1;j--)
copy[indexcopy--]=data[j];
return left+right+count;
}};
劍指offer 50 陣列中重複的數字
在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。這道題是比較基礎,主要思路如下 首先判斷陣列是否為空,若為空直接返回...
劍指Offer(50) 陣列中重複的數字
在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。1 將陣列連線成字串變數stringbuilder 2 按位遍歷字串...
劍指offer 50 陣列中重複的數字
在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。思路 解法一 雜湊表 時間o n 空間o n class solut...