演算法題1 字串行交換(阿里巴巴筆試題)

2021-08-04 04:22:56 字數 640 閱讀 6913

題目:

若初始序列為gbfcdae,那麼至少需要多少次兩兩交換,才能使該序列變為abcdefg ?

任給乙個自由a--g這7個字母組成的排列,最壞的情況下需要至少多少次兩兩交換,才能使序列變為abcdefg ?

分析一:字母交換問題

字母可以任意交換,最壞情況是每個字元都需要交換一次來達到最終位置,

最後一次交換使的兩個字元同時到達最終位置。n個字元最壞情況需要至少n-1次交換,

gbfcdae中b已經在自己的位置上又少了一次,所以5次。

分析二:圖論的拓撲排序

拓撲排序定義:簡單的說,由某個集合上的乙個偏序得到該集合上的乙個全序,這個操作稱之為拓撲排序。

在aov網中,若不存在迴路,則所有活動可排列成乙個線性序列,使得每個活動的所有前驅活動都排在該活動的前面,我們把此序列叫做拓  撲序列(topological order)。

由aov網構造拓撲序列的過程叫做拓撲排序(topological sort)。

有向無環圖(directed acyclic graph, dag)是有向圖的一種,字面意思的理解就是圖中沒有環。常常被用來表示事件之間的驅動依賴關係,管理任務之間的排程。

拓撲排序是對dag的頂點進行排序,使得對每一條有向邊(u, v),均有u(在排序記錄中)比v先出現。

阿里巴巴2014筆試演算法題彙總

1.兩棵二叉樹t1和t2,t1的節點數是百萬量級,t2的節點數一千以內,請給出判斷t2是否t1子樹的可行演算法。分析 首先想到的是遞迴,但是t1的數量級太大,遞迴會導致棧溢位,於是以非遞迴實現。bool issubtree binarytreenode proot1,binarytreenode p...

阿里巴巴2014筆試演算法題彙總

1.兩棵二叉樹t1和t2,t1的節點數是百萬量級,t2的節點數一千以內,請給出判斷t2是否t1子樹的可行演算法。分析 首先想到的是遞迴,但是t1的數量級太大,遞迴會導致棧溢位,於是以非遞迴實現。bool issubtree binarytreenode proot1,binarytreenode p...

演算法題(一) 字串

public static string submax string strarr else if max k system.out.println max return arrays.copyofrange strarr,start,end 1 給定兩個字串str1,str2。如果兩者字元種類和相...