#42992: two pointer+greedy


goodlogic (GoodLogic)

學校 : 中原大學
編號 : 236459
來源 : [60.251.220.106]
最後登入時間 :
2024-10-30 11:59:47
n733. 11536 - Smallest Sub-Array -- UVA | From: [60.251.220.105] | 發表日期 : 2024-10-14 23:03

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

 

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

 

有兩種情況:

 

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

 

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

 

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

O(T*N)

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

 
ZeroJudge Forum