力扣笔记持续更新

力扣笔记

数组

链表

哈希表

字符串

双指针

栈与队列

二叉树

回溯

贪心

动规

哈希+双向链表

1.LRU缓存

1.构造双向链表:节点中包含key和value,每个节点有prev和next,用结构体构造。
struct DLinkedNode{
int key,value;
DLinkedNode* prev;
DLinkedNode* next;
DLinkedNode():key(0),value(0),prev(nullptr),next(nullptr){}
DLinkedNode(int _key,int _value):key(_key),value(_value),prev(nullptr),next(nullptr){}
};
2.LRU缓存中构造构造哈希表包含键值和链表节点,构造头节点和尾节点,构造容量和现存量。
private:
unordered_map<int,DLinkedNode*> cache;
DLinkedNode* head;
DLinkedNode* tail;
int size;
int capacity;
3.LRU缓存中编写四个函数,分别为添加到头节点、删除节点、移动到头节点、删除尾节点,前三个void,最后一个返回尾节点。
void addToHead(DLinkedNode* node){
node->prev=head;
node->next=head->next;
head->next->prev=node;
head->next=node;
}
void removeNode(DLinkedNode* node) {
node->prev->next=node->next;
node->next->prev=node->prev;
}
void moveToHead(DLinkedNode* node) {
removeNode(node);
addToHead(node);
}
DLinkedNode* removeTail() {
DLinkedNode* node = tail->prev;
removeNode(node);
return node;
}
4.LRUCache函数:默认构造容量和现存量,创建头节点和尾节点,连接两节点。
LRUCache(int _capacity):capacity(_capacity),size(0) {
head=new DLinkedNode();
tail=new DLinkedNode();
head->next=tail;
tail->prev=head;
}
5.get函数:如果哈希中key不存在返回-1,否则先通过哈希表定位,再移动到头部。
int get(int key) {
if(!cache.count(key)){
return -1;
}
DLinkedNode* node=cache[key];
moveToHead(node);
return node->value;
}
6.put函数:如果哈希中key不存在则构造一个新的节点并添加至链表头部然后改变现存量,改变后若超过容量则删除尾节点,注意此处要防止内存泄漏然后改变现存量。如果key存在则通过哈希表定位,修改value然后移动到头部。
void put(int key, int value) {
if(!cache.count(key)){
DLinkedNode* node=new DLinkedNode(key,value);
cache[key]=node;
addToHead(node);
++size;
if(size>capacity){
DLinkedNode* removed=removeTail();
cache.erase(removed->key);
delete removed;
–size;
}
}
else{
DLinkedNode* node=cache[key];
node->value=value;
moveToHead(node);
}
}

MYSQL

1.产品在不同商店的价格

1.行转列,一列一列处理,将列名作为新表列的value,把原来的value(price)作为新的一列
2.用union all拼接每一列的结果
3.若这一产品在商店没有销售,则不输出,用where … is not null来筛选
select product_id,‘store1’ as store,store1 as price from Products where store1 is not null
union all
select product_id,‘store2’ as store,store2 as price from Products where store2 is not null
union all
select product_id,‘store3’ as store,store3 as price from Products where store3 is not null;

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值