leetcode-设计LRU缓存结构-112

server/2024/9/24 0:17:48/

题目要求
在这里插入图片描述

思路
双链表+哈希表
代码实现

struct Node{int key, val;Node* next;Node* pre;Node(int _key, int _val): key(_key), val(_val), next(nullptr), pre(nullptr){}
};class Solution {
public:
unordered_map<int, Node*> hash;
Node* head;
Node* tail;
int cap;
int size;Solution(int capacity){size = 0;cap = capacity;head = nullptr;tail = nullptr;hash.clear();}void removetohead(Node* p)
{if(p == head)return;p->pre->next = p->next;if(p == tail)tail = p->pre;elsep->next->pre = p->pre;p->next = head;p->pre = nullptr;head->pre = p;head = p;return;
}int get(int key) {if(hash.find(key) == hash.end())return -1;removetohead(hash[key]);return hash[key]->val;}void set(int key, int val){if(hash.find(key) != hash.end()){hash[key]->val = val;removetohead(hash[key]);}else {if(size < cap) {Node* p = new Node(key, val);if(head == nullptr)head = tail = p;else {head->pre = p;p->next = head;head = p;}hash[key] = head;size++;}else{int k = tail->key;hash.erase(k);tail->key = key;tail->val = val;removetohead(tail);hash[key] = head;}}}
};

http://www.ppmy.cn/server/45166.html

相关文章

算法训练营day35

题目1&#xff1a;122. 买卖股票的最佳时机 II - 力扣&#xff08;LeetCode&#xff09; 贪心算法思路很简单&#xff0c;就是把每一天的利润都算出来&#xff0c;然后把整的加起来就是结果 class Solution { public:int maxProfit(vector<int>& prices) {int resu…

【SpringBoot】整合百度文字识别

流程图 一、前期准备 1.1 打开百度智能云官网找到管理中心创建应用 全选文字识别 1.2 保存好AppId、API Key和Secret Key 1.3 找到通用场景文字识别&#xff0c;立即使用 1.4 根据自己需要&#xff0c;选择要开通的项目 二、代码编写 以通用文字识别&#xff08;高精度版&am…

内存函数<C语言>

前言 前面两篇文章介绍了字符串函数&#xff0c;不过它们都只能用来处理字符串&#xff0c;C语言中也内置了一些内存函数来对不同类型的数据进行处理&#xff0c;本文将介绍&#xff1a;memcpy()使用以及模拟实现&#xff0c;memmove()使用以及模拟实现&#xff0c;memset()使用…

如何配置才能连接远程服务器上的 redis server ?

文章目录 Intro修改点 Intro 以阿里云服为例。 首先&#xff0c;我在我买的阿里云服务器中以下载源码、手动编译的方式安装了 redis-server&#xff0c;操作流程见&#xff1a;Ubuntu redis 下载解压配置使用及密码管理 && 包管理工具联网安装。 接着&#xff0c;我…

机器学习之二分类提升决策树(Two-class Boosted Decision Tree)

二分类提升决策树(Two-class Boosted Decision Tree)是一种常用的机器学习方法,主要用于分类任务。该方法结合了决策树模型和提升(boosting)算法的优点,通过多个弱分类器(通常是简单的决策树)来构建一个强分类器。下面是关于二分类提升决策树的主要概念和工作流程: 1…

关于《Java并发编程之线程池十八问》的补充内容

一、写在开头 在上一篇文章我们写《Java并发编程之线程池十八问》的时候,鉴于当时的篇幅已经过长,很多内容就没有扩展了,在这篇文章里对一些关键知识点进行对比补充。 二、Runnable vs Callable 在创建线程的时候,一般会选用 Runnable 和 Callable 两种方式。 【源码对…

最长递增子序列,交错字符串

第一题&#xff1a; 代码如下&#xff1a; int lengthOfLIS(vector<int>& nums) {//dp[i]表示以第i个元素为结尾的最长子序列的长度int n nums.size();int res 1;vector<int> dp(n, 1);for (int i 1; i < n; i){for (int j 0; j < i; j){if (nums[i]…

Kubectl 的使用——k8s陈述式资源管理

一、kebuctl简介: kubectl 是官方的CLI命令行工具&#xff0c;用于与 apiserver 进行通信&#xff0c;将用户在命令行输入的命令&#xff0c;组织并转化为 apiserver 能识别的信息&#xff0c;进而实现管理 k8s 各种资源的一种有效途径。 对资源的增、删、查操作比较方便&…