劍指offer系列28 陣列中的逆序對

2022-04-03 02:22:18 字數 1608 閱讀 9345

這個題我拿到沒什麼好的思路,除了乙個個求的方法之外想不出效率更高的方法。這個題看劍指offer的意思是按照歸併排序的方法做的,順便複習一下歸併排序^_^。看到這個題只要能想到用歸併排序的方法做就已經成功了一半了,其次就是一些細節問題。寫**,你又思路,又會將思路用**寫出來才可以。只有思路不會寫**也不行。寫**的時候一定要認真仔細,養成良好的習慣,盡量在寫的時候就少出錯誤,因為修改起來要找到錯誤並非易事。還有就是不要將問題想得太複雜,不用自己嚇唬自己。認真,仔細,這道題有一些點很值得借鑑。特別是對與兩個vector的相互之間的關係的處理,就是我備註的那一行,很巧妙的將乙個vectoe的資料變化給了另乙個vector。

1 #include2 #include 3 #include 4

using

namespace

std;

5class

solution

17long

long re = inversecore(data, auxi, 0, len - 1);//

一定要設定成long long,否則只能通過一半測試用例

18return re % 1000000007;19

}20long

long inversecore(vector &v, vector &temp, int start, int

end)

2127

int length = (end - start) / 2;28

long

long left = inversecore(temp,v,start,start+length);//

看清楚這裡的函式呼叫,之所以這樣寫是要把上一次遞迴中對它做的改變給記錄上去

29long

long right= inversecore(temp,v,start+length+1

,end);

3031

int i = start+length;//

記住這種中值數一定是由兩部分構成的,因為start不一定只從0開始

32int j =end;

33int k =end;

34long

long count = 0;35

while (i >= start&&j >= length + start + 1)36

42else

43 temp[k--] = v[j--];44}

45for (; i >= start; i--)

46 temp[k--] = v[i];//

這裡迴圈裡又i--了就不用再減了

47for (; j >= length + start + 1; j--)

48 temp[k--] =v[j];

49return left + right +count;50}

51};

52int

main()53;

56 cout << so.inversepairs(test) <57return0;

58 }

最後說一點,寫**一定要靜下心。好好理清楚思路,寫的時候每一步都想清楚為什麼,大框架要清楚,小細節也不能忽視。

劍指offer系列 陣列中逆序對

題目描述 輸入乙個陣列,求出其中逆序對的總個數 示例 輸入 逆序對有,幾種情況 因此輸出5 分析 利用歸併排序的思想進行排序,時間複雜度o nlgn int inversepairscore vector nums,vector copy,int begin,int end int mid begi...

劍指offer系列 (陣列中重複的數字)

第一題陣列中重複的數字 題目描述 在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。分析 由於題目要求時間複雜度 o ...

劍指offer系列 陣列中的逆序對

最近一直在家刷面經,因為疫情也出不去。所以沒事就會在知乎回答別人提出的問題,還有就是刷題。最近leetcode授權了劍指offer的題,然後就當作我是複習吧。目前還在刷,今晚吃飽刷到這道歸併排序的高階題目 陣列中的逆序對,所以寫一篇關於它的題解吧。在陣列中的兩個數字,如果前面乙個數字大於後面的數字,...