11.4 leetcode打卡
23.合并K个升序链表
代码实现
class Solution {
public:
ListNode* mergeKLists(vector<ListNode*>& lists) {
ListNode *head = new ListNode(0);
ListNode *curr = head;
vector<int> ans;
for(int i = 0; i < lists.size(); ++ i){
ListNode *cur = lists[i];
while(cur){
ans.push_back(cur->val);
cur = cur->next;
}
}
sort(ans.begin(), ans.end());
for(int i = 0; i < ans.size(); ++ i){
curr->next = new ListNode(ans[i]);
curr = curr->next;
}
return head->next;
}
};
114.二叉树展开为链表
代码实现
class Solution {
public:
ListNode* mergeKLists(vector<ListNode*>& lists) {
ListNode *head = new ListNode(0);
ListNode *curr = head;
vector<int> ans;
for(int i = 0; i < lists.size(); ++ i){
ListNode *cur = lists[i];
while(cur){
ans.push_back(cur->val);
cur = cur->next;
}
}
sort(ans.begin(), ans.end());
for(int i = 0; i < ans.size(); ++ i){
curr->next = new ListNode(ans[i]);
curr = curr->next;
}
return head->next;
}
};
LRU缓存机制
代码实现
class LRUCache {
public:
LRUCache(int capacity) : _capacity(capacity) {
}
int get(int key) {
auto it = _table.find(key);
if (it != _table.end()) {
_lru.splice(_lru.begin(), _lru, it->second);
return it->second->second;
}
return -1;
}
void put(int key, int value) {
auto it = _table.find(key);
if (it != _table.end()) {
_lru.splice(_lru.begin(), _lru, it->second);
it->second->second = value;
return;
}
_lru.emplace_front(key, value);
_table[key] = _lru.begin();
if (_table.size() > _capacity) {
_table.erase(_lru.back().first);
_lru.pop_back();
}
}
private:
unordered_map<int, std::list<std::pair<int, int>>::iterator> _table;
std::list<std::pair<int, int>> _lru;
int _capacity;
};