#44274: 有關於換位


isis0517 (同分異構式)

學校 : 不指定學校
編號 : 27333
來源 : [36.225.81.178]
最後登入時間 :
2025-06-25 22:20:42

老人看到有人在FB問這題就手癢上班偷偷來寫,

分享一下我在FB上看到吳邦一先生(我猜是老師?)給的提示 [原始連結]:

  • 算swap次數是不需要真正去排序的。如果你的左邊目前有k個比你大,你要移到他們前面就需要k次swap;相同的,如你的後方有h個比你大,你要移到它們後面就需要h次swap。如果是要排成由矮到高,答案就是算inversion(每個元素的前方有幾個比他大)

以下是更詳細的想法

 

 

 

 

我的排序策略是從矮的小朋友開始排序。對於每位小朋友移動到合法的位置有兩個選擇,往右走或是往左走。再走的時候是不需要考慮比她矮的小朋友,因為理論上比較小(矮)的小朋友都已經先排好到兩側了。所以每位小朋友需要的最小swap就是min(右走步數, 左走步數)。由於這題不需要真的排序出答案,所以是不需要真的swap小朋友就可以得到答案囉(HINT: 需要額外維護一個陣列)。