面試題40 陣列中的逆序對

2021-07-09 07:03:40 字數 794 閱讀 4371

題目:

在陣列中的兩個數字如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中逆序對的總數。

邊界條件及異常:

陣列為空,或只有乙個元素

思路:根據歸併排序來做

時間複雜度:o(nlgn)

空間複雜度:o(n)

#include #include #include #include #include #include #include //for hashtable

#include #include #include #include using namespace std;

int mergeandcount(vectornums,vector©, int start, int end)

else copy[indexincopy--] = nums[j--];

} //for (; i >= start; --i) copy[indexincopy--] = nums[i];

//for (; j >= start + length + 1; --j) copy[indexincopy--] = nums[j];

return left + right + count;

}int inversepairs(vectornums)

int main()

; vectornums(arr, arr + 4);

cout << inversepairs(nums) << endl;

return 0;

}

面試題 陣列中的逆序對

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對總數。例如嗎,在陣列中,一共存在5個逆序對,分別是 7,6 7,5 7,4 6,4 和 5,4 思路 作者給出的是基於歸併排序的一種演算法。那麼必然比暴力的o n 2 的好。如下 in...

面試題 陣列中的逆序對

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數p。並將p對1000000007取模的結果輸出。即輸出p 1000000007 1.如果對每乙個數字,依此查詢它前面的所有數字,複雜度為o n2 2.結合歸併排序的思想,複雜度為...

面試題29 陣列中的逆序對

暴力方法 掃瞄陣列中的每個數,逐個比較該數字和其後面的數字的大小,若後面的數字比其小,則是乙個逆序對。改進方法 先把陣列分割成子陣列,先統計出子陣列內部的逆序對數,然後再統計出兩個相鄰子陣列見的逆序對數。統計逆序對的過程中,需要對陣列進行排序。顯然排序過程是歸併排序。時間複雜度由o n 2 降為o ...