演算法
暴力
容易發現雙指標可以找到每一個區間 \([L, R]\), 使得這個區間覆蓋 \(1\) ~ \(n\) 的每一個數, 也即區間外覆蓋 \(1\) ~ \(n\) 的每一個數, 這是 \(O(n)\) 的
考慮判斷
對於兩個數列 \(A\), \(B\)
顯然, 在 \(A\) 中先取出的要在 \(B\) 中最後取出, 所以把 \(A\) 壓入棧中, 判斷棧頂是否在 \(B\) 的兩端出現, 完事之後記錄一下
正解
發現瓶頸在 \(O(n)\) 找區間上
如果假設第一次取左端
那麼與之相對應唯一確定的一個數就必須最後一個取
於是分成兩段
於是易得
程式碼
??? 有時間補
總結
善於運用基礎資料結構
分析瓶頸之後想辦法最佳化