Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitf10233b

Browse files
Add files via upload
1 parente587a1d commitf10233b

File tree

1 file changed

+77
-0
lines changed

1 file changed

+77
-0
lines changed

‎LRU Cache/LRU_Cache.cpp‎

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
// 使用双向链表和哈希表共同实现
2+
// typedef 如果写在函数外部,作用范围就是本文件
3+
// 如果写在函数内,作用范围本函数
4+
// 如果写在类内,且是公有,就可以在类外用className::typename来调用,如果是私有,当然也就不行了
5+
6+
// Runtime: 120 ms, faster than 40.72% of C++ online submissions for LRU Cache.
7+
// Memory Usage: 40 MB, less than 32.93% of C++ online submissions for LRU Cache.
8+
9+
classLRUCache
10+
{
11+
public:
12+
LRUCache(int capacity)
13+
{
14+
maxSize = capacity;
15+
}
16+
17+
intget(int key)
18+
{
19+
auto iter = hashmap.find(key);
20+
if (iter == hashmap.end())
21+
{
22+
return -1;
23+
}
24+
else
25+
{
26+
update(iter);
27+
return iter->second.first;
28+
}
29+
}
30+
31+
voidput(int key,int value)
32+
{
33+
auto iter = hashmap.find(key);
34+
if (iter == hashmap.end())
35+
{
36+
if (hashmap.size() == maxSize)
37+
{
38+
int key = queue.back();
39+
queue.pop_back();
40+
hashmap.erase(key);
41+
}
42+
43+
queue.push_front(key);
44+
hashmap.insert(pair<int, pa>(key,pa(value, queue.begin())));
45+
}
46+
else
47+
{
48+
iter->second.first = value;
49+
update(iter);
50+
}
51+
}
52+
private:
53+
typedef list<int>::iterator lit;
54+
typedef pair<int, lit> pa;
55+
private:
56+
voidupdate(unordered_map<int, pa>::iterator iter)
57+
{
58+
int key = iter->first;
59+
60+
queue.erase(iter->second.second);
61+
62+
queue.push_front(key);
63+
64+
iter->second.second = queue.begin();
65+
}
66+
private:
67+
int maxSize;
68+
list<int> queue;
69+
unordered_map<int, pa> hashmap;
70+
};
71+
72+
/**
73+
* Your LRUCache object will be instantiated and called as such:
74+
* LRUCache* obj = new LRUCache(capacity);
75+
* int param_1 = obj->get(key);
76+
* obj->put(key,value);
77+
*/

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp