劍指Offer第三十五題 陣列中的逆序對

2021-09-17 23:45:15 字數 1010 閱讀 8559

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數p。並將p對1000000007取模的結果輸出。 即輸出p%1000000007

題目保證輸入的陣列中沒有的相同的數字

資料範圍:

對於%50的資料,size<=10^4

對於%75的資料,size<=10^5

對於%100的資料,size<=2*10^5

示例1:

輸入

1,2,3,4,5,7,0

輸出

思路:

做的差點懷疑人生,唉,卡了好久,看到這題我先試了選擇排序,一直成功率是百分之50,後來才知道,是數字超過上限了,也是醉了。然後嘗試了歸併排序,歸併排序寫起來不太難,之前也寫過,不過還是沒把這個和答案聯絡起來,看網上的也看暈了,可能還是太急躁,不過最後還是做出來了。

這個版本算是好理解的版本了,這裡的num就是最後答案,這裡的累加就在比較的時候,比如含有兩組有序數列比較

[2,4,6,8,10,1,3,5,7,9]; 這裡 left = 0 ; right = 9, 計算 mid = 4, 我們拿 a[1] = 4,舉例,跟 a[6]=3比較,如果  a[1]>a[6],那肯定a[1]到 a[mid] (即a[4]) 的數都大於a[6],這裡的個數就是middle-i+1;

利用這個公式就能放入歸併排序計算

class solution 

void mymerge(vector&a, vector&tmp,int start,int end,int &num)

}if(i == middle+1)

else

while(left<= right)

}

};

牛客劍指offer第三十五題(陣列中的逆序對)

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數p。並將p對1000000007取模的結果輸出。即輸出p 1000000007 複製陣列,將新的陣列進行排序,然後逐個取出並刪除新陣列中的最小數,在原陣列中找到其位置,在他前面有...

LeetCode第三十五題 Python實現

title leetcode no.35 categories tags 給定乙個排序陣列和乙個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。你可以假設陣列中無重複元素。示例 1 輸入 1,3,5,6 5 輸出 2 示例 2 輸入 1,3,5,6 ...

Leetcode第三十五題 搜尋插入位置

題目 給定乙個排序陣列和乙個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。你可以假設陣列中無重複元素。示例 1 輸入 1,3,5,6 5 輸出 2 示例 2 輸入 1,3,5,6 2 輸出 1 示例 3 輸入 1,3,5,6 7 輸出 4 示例 4...