牛客 / 牛客132题

牛客高频面试题

链表

78.反转链表

  • 1.迭代:辅助指针
  • 2.递归
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ListNode* ReverseList(ListNode* head) {
if (head == NULL || head->next == NULL)
return head;

ListNode* pre = NULL;
ListNode* next = NULL;

while(head){
next = head->next;
head->next = pre;
pre = head;
head = next;
}

return pre;
}
1
2
3
4
5
6
7
8
9
10
11
12
ListNode* ReverseList(ListNode* head) {
if (head == NULL || head->next == NULL)
return head;

ListNode* tmp = head->next;
ListNode* res = ReverseList(tmp);

tmp->next = head;
head->next = NULL;

return res;
}

94.LRU缓存实现(页面置换)

1
2


STL容器

94.LRU缓存实现(页面置换)

  • LRU页面置换算法——最久未使用
  • 利用List和unordered_map来实现,list存放元素,
  • list存放元素,unordered_map存放迭代器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
int get(int key) {
auto it = vis.find(key);
if (it == vis.end()) {
return -1;
}
else {
pair<int, int>tmp = *vis[key];
arr.erase(vis[key]);
arr.push_front(tmp);

vis.erase(key);
vis[key] = arr.begin();
return tmp.second;
}
}
void set(int key, int value) {
auto it = vis.find(key);
if (it == vis.end()) {
if (arr.size() == size) {
pair<int, int>tmp = arr.back();
arr.pop_back();
arr.push_front({ key,value });

vis.erase(tmp.first);
vis[key] = arr.begin();
}
else {
arr.push_front({ key,value });
vis[key] = arr.begin();
}
}
else {
arr.erase(vis[key]);
arr.push_front({ key,value });

vis[key] = arr.begin();
}

}

二分查找

105.lower_bound / upper_bound

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//大于或等于target的第一个数
int lower_bound(vector<int>& nums, int target) {
int L = 0;
int R = nums.size();
while (L < R) {
int mid = (L + R) >> 1;
if (nums[mid] < target)
L = mid + 1;
else
R = mid;
}
return L;
}

//大于target的第一个数
int upper_bound(vector<int>& nums, int target) {
int L = 0;
int R = nums.size();
while (L < R) {
int mid = (L + R) >> 1;
if (nums[mid] <= target)
L = mid + 1;
else
R = mid;
}
return L;
}
文章作者: Inter
文章链接: https://zuizichuan.cn/2020/09/16/LeetCode-%E7%89%9B%E5%AE%A2132%E9%A2%98/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Zichuan365' Blog