語法書 / AA 競程語法書 下冊 / 第十一單元 / 排序能解決哪些問題

11.9 排序能解決哪些問題

會用 sort 之後,來看排序真正的價值:很多看起來跟排序無關的題目,排完序就變簡單了。這一節走三個經典場景,套路都是同一句話——排序後,該在一起的元素就在隔壁。

場景一:有幾個相異的數?

給 n 個數,問其中有幾個不同的數值。直覺做法:對每個數,往前檢查它出現過沒有——雙層迴圈,n 個數各檢查最多 n 次,運算量 O(n^2) 等級;n = 10^6 時約 10^{12} 次操作,用上冊 4.9 的基本法則(每秒約 10^9 次)一估——要跑千秒等級,死當。

換排序的思路:排序後,相同的數必定擠在一起。所以「新面孔」只會出現在「跟左邊那格不一樣」的位置:

登入後即可閱讀完整內容

語法書免費開放給所有 AACPOJ 帳號,註冊只要一分鐘。