#42992: two pointer+greedy


goodlogic (GoodLogic)


考量到只有O(N)能過,可以直接想greedy。

 

嘗試由左到右遍歷會發現如果一個數字出現第二次,第二次的位子一定比較好。

 

有兩種情況:

 

一、遍歷範圍沒滿k,換新的必定讓範圍更小

 

二、遍歷範圍滿k,更小的一定發生在右遍的新區段,因此換新的才不會舊的擋在左邊

 

確定這個方法之後,可以用two pointer維護左端點,cnt>1就更新,邊找出最短距離即可。

O(T*N)

my code : https://ideone.com/PMhdek