天天看點

使用Swift模拟Window-LFU

  今天參加了某公司2015的校招的機試,大題開放題比較多,有一道大題是Window-LFU比較有意思,當時題目搞了半天沒搞明白讓幹啥- -題目大概是這樣的:實作一個Window-LFU緩存(其實就是用數組去緩存,當時差點用NSCache去做),要在API中暴露set、get、remove方法,并且可以指定cache的長度和window的大小。我用Swift實作的,當時做的時候時間比較緊沒有做的太完整,後來仔細思考了一下完善了自己的代碼,隻是個人的一些想法,不保證正确- -:

構造器中初始化cache和window

這裡我用一個全局變量globalIndex來表示時間,每一次get和set都會使globalIndex加1,數組中存儲的資料結構是個3元元組,分别表示要存儲的值、通路次數和目前globalIndex。

get方法中通路次數+1

set方法中判斷是否需要替換,如果需要替換再判斷是否在window的門檻值中

然後使用Swift中最高效的周遊方法求出最近最少使用的下标位置進行替換

remove就是一個删除方法