LeetCode LRU Cache & Insertion Sort List
来源:互联网 发布:nginx log 时间格式 编辑:程序博客网 时间:2024/05/01 04:25
LRU Cache
Total Accepted: 16727 Total Submissions: 120052My SubmissionsDesign and implement a data structure for Least Recently Used (LRU) cache. It should support the following operations: get
and set
.
get(key)
- Get the value (will always be positive) of the key if the key exists in the cache, otherwise return -1.set(key, value)
- Set or insert the value if the key is not already present. When the cache reached its capacity, it should invalidate the least recently used item before inserting a new item.
这一题需要O(log n)的复杂度才能过,于是可以借助map的红黑树。
trick是map里存的是list的iterator.
用list记录顺序。list大概是类似双向队列的东西。然后begin() end() front() back()竟然搞混了。
class LRUCache{ struct CacheNode {int key;int val;CacheNode(int a, int b) : key(a), val(b) {}};public:LRUCache(int capacity) {cap = capacity;}int get(int key) {if (cacheMap.find(key) != cacheMap.end()) { touch(key);return cacheList.begin()->val;}else return -1;}int set(int key, int val) {if (cacheMap.find(key) != cacheMap.end()) { touch(key);cacheMap[key]->val = val;}else {if (cacheList.size() >= cap) {cacheMap.erase(cacheList.back().key);cacheList.pop_back();}cacheList.push_front(CacheNode(key, val));cacheMap[key] = cacheList.begin();}}// CacheNode key already exists, so transfer it to begin of the listvoid touch(int key) { // solution 1 // cacheList.splice(cacheList.begin(), cacheList, cacheMap[key]); // solution 2 cacheList.push_front(*cacheMap[key]); cacheList.erase(cacheMap[key]); cacheMap[key] = cacheList.begin();}int cap;map<int, list<CacheNode>::iterator> cacheMap;list<CacheNode> cacheList;};
Insertion Sort List
Total Accepted: 20174 Total Submissions: 79737My SubmissionsSort a linked list using insertion sort.
指针类型的插入排序。
所以要用指针记录已经排好的头和尾。
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode *insertionSortList(ListNode *head) { if (head == NULL) return head;ListNode *ans = head;ListNode *tail = head;ListNode *p, *tmp;while (tail->next) {int val = tail->next->val;if (val < ans->val) {//insert to the front tmp = tail->next;tail->next = tmp->next;tmp->next = ans;ans = tmp;}else {for (p = ans; p->next->val <= val && p != tail; p = p->next);if (p != tail) {tmp = tail->next;tail->next = tmp->next;tmp->next = p->next;p->next = tmp;}else tail = tail->next;}return ans; }};
0 0
- LeetCode LRU Cache & Insertion Sort List
- Insertion Sort List | leetcode
- Leetcode: Insertion Sort List
- [LeetCode] Insertion Sort List
- Leetcode: Insertion Sort List
- leetcode-Insertion Sort List
- [LeetCode]Insertion Sort List
- 【LeetCode】Insertion Sort List
- LeetCode | Insertion Sort List
- LeetCode - Insertion Sort List
- [LeetCode] Insertion Sort List
- Insertion Sort List (LeetCode)
- [LeetCode] Insertion Sort List
- [LeetCode]Insertion Sort List
- leetcode Insertion Sort List
- Insertion Sort List -- LeetCode
- Insertion Sort List (LeetCode)
- LeetCode Insertion Sort List
- Eclipse开发快捷键
- SVN服务器搭建和使用(三)
- TortoiseSVN客户端重新设置用户名和密码
- 【IOT】35款开源工具助力IOT
- app被拒绝的各种原因
- LeetCode LRU Cache & Insertion Sort List
- 结合mahout的数据挖掘算法介绍
- vim查看二进制文件
- Chrome浏览器开发调试系列(一)
- 使用draggable插件实现对象的拖曳操作8-1
- Spring声明式事务管理与配置介绍
- HDU 1061-Rightmost Digit(快速幂)
- Cvbox2D(RotatedRect)的解析与应用
- Java坦克大战 (五) 之产生敌方坦克和爆炸效果