劍指Offer 50 陣列中的逆序對

2021-08-14 22:45:55 字數 1089 閱讀 3253

題目描述

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數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...