Open seungriyou opened 6 months ago
https://leetcode.com/problems/lru-cache/
๐ญ๐ญ๐ญ...
ref: https://www.romaglushko.com/blog/design-lru-cache/ [!caution] constraint: The functions get and put must each run in O(1) average time complexity.
ref: https://www.romaglushko.com/blog/design-lru-cache/
[!caution] constraint: The functions get and put must each run in O(1) average time complexity.
get
put
O(1)์ ์์ ์ฐพ๊ธฐ (for cache) โก๏ธ hash table
O(1)์ least recently used ์์ ์ฐพ๊ธฐ (for LRU) โก๏ธ linked list
add
remove
get()
put()
๋ ๊ฐ์ง์ ์ฅ์ ์ ๋ชจ๋ ์ฌ์ฉํ์! โก๏ธ hash table + linked list
์์์ usage๋ฅผ doubly-linked list๋ก ๊ด๋ฆฌํ๋, ํ์ฌ ์ฌ์ฉํ๋ ค๋ ์์๋ฅผ linked list์์ O(1)์ ์ฐพ๊ธฐ ์ํด hash table์ ์๋จ์์ ์ฌ์ฉํ๋ค.
โฌ๏ธ ๋ค์์ ๊ทธ๋ฆผ์ linked list์ ๋ฐฉํฅ์ด ๊ฑฐ๊พธ๋ก์ (least recently used ์์๊ฐ tail์ ์์น)
[!tip] linked list๋ฅผ ๊ตฌํํ๊ธฐ ์ํด Node ํด๋์ค๋ฅผ ๋ง๋ค์ด๋ ๋์ง๋ง, ์ด๋ค ์์์ ๋ํด next / prev๋ฅผ ์ ์ฅํ๋ dict ๋ง ๊ด๋ฆฌํด๋ ๋๋ค!
Node
next
prev
dict
O(1)
O(n)
๐ญ๐ญ๐ญ...
Approach
O(1)์ ์์ ์ฐพ๊ธฐ (for cache) โก๏ธ hash table
O(1)์ least recently used ์์ ์ฐพ๊ธฐ (for LRU) โก๏ธ linked list
add
&remove
ํ๊ธฐ ์ํด doubly-linked list๋ก ๊ตฌํํ๋ค.get()
orput()
) ํ ๋๋ง๋ค ํด๋น ์์๋ฅผ linked list์ tail๋ก ์ด๋/์ถ๊ฐํ๋ฉด, linked list์ head์๋ least recently used ์์๊ฐ ์์นํ๊ฒ ๋๋ค.๋ ๊ฐ์ง์ ์ฅ์ ์ ๋ชจ๋ ์ฌ์ฉํ์! โก๏ธ hash table + linked list
์์์ usage๋ฅผ doubly-linked list๋ก ๊ด๋ฆฌํ๋, ํ์ฌ ์ฌ์ฉํ๋ ค๋ ์์๋ฅผ linked list์์ O(1)์ ์ฐพ๊ธฐ ์ํด hash table์ ์๋จ์์ ์ฌ์ฉํ๋ค.
Complexity
get()
&put()
:O(1)
O(n)