逆序數的三種求法

2021-07-09 02:02:25 字數 564 閱讀 7947

未完待續。。。

逆序數:乙個數列nums[n],對任意兩個數,如果前面的數大於後面的數,那麼就稱它們為一對逆序數。

我們用乙個陣列儲存逆序數的值,reverse[i]表示nums[i]之後且比nums[i]小的數。

下面我們用三種方法(第一種方法沒有實際意義)來求reverse陣列。

1. 完全暴力計數法

先將reverse[n]陣列初始化為0.

求reverse[i]時,從nums[i]開始,依次向後比較每個數,如果比nums[i]小,reverse[i]就自增1.

每次掃瞄的比較次數成 等差數列,故可知時間複雜度為o(n2).

2.樹狀陣列法

我們以 2, 1, 1, 0為例來說明。

我們定義同等大小的樹狀陣列reverse[4]。

先對該陣列去重後,進行排序,得到0, 1, 2.

初始化reverse陣列為全0

0, 0, 0, 0

從最大值到最小值依次考察,對於2,將其對應下標reverse[3]+1

得到 1, 0, 0, 0

對於次大值1,

3.歸併法

逆序數的求法

求乙個數列的逆序數 逆序對 數列s 1 a 2 a 3 中的任意兩個數s i s j is j 那麼我們就說這兩個數構成了乙個逆序對 逆序數 乙個數列中逆序對的總數 5,4 是乙個逆序對,同樣還有 3,2 5,2 4,2 等等 那麼如何求得乙個數列的逆序數呢?方法1 乙個乙個的數 最簡單也是最容易想...

逆序數及其求法

1.逆序數 所謂逆序數,就是指乙個序列s i 統計處於序列的每個數的比這個數大並且排在它前面的數的數目,然後對於所有數,把這個數目加起來求和就是了。比如4 3 1 2 4第乙個,所以數目為0 3的前面是4,大於3的數目為1 1的前面是4 3 大於1的數目為2 2的前面是4 3 1,大於2的數目為2 ...

逆序數的幾種求法

求乙個數列的逆序數 逆序對 數列a 1 a 2 a 3 中的任意兩個數a i a j i,如果a i a j 那麼我們就說這兩個數構成了乙個逆序對 逆序數 乙個數列中逆序對的總數 如數列3 5 4 8 2 6 9 5,4 是乙個逆序對,同樣還有 3,2 5,2 4,2 等等 那麼如何求得乙個數列的逆...