給一個數列問將其排序遞增或者遞減序列的最小交換次數。
一。 只能交換相鄰元素
該情況下最少交換次數即為逆序數的數目,求逆序數只要從1~n遍歷數組,每次添加一個數字到樹狀數組然后求前綴和即可
二。可以交換任意位置的元素
例如2 4 3 1,可以知道1應該與2交換,而2應該與4交換,4應該與1交換,這樣就形成一個循環(3應該與本身交換可以看作自環),易知這樣的循環中如果有x個數,只要交換x-1次就能將這個循環內的大小順序排好,而不同的循環之間是不會影響的,所以假如n個數有k個循環,每個循環有ai個數,則交換次數應該為(a1-1)+ (a2-1) + ... + (ak-1) = n-k,即數組數目減循環個數,求循環個數直接對數組建圖然后dfs一遍即可