Leetcode_146. LRU 缓存

2023-10-27

 C语言纯暴力解法,能AC我没想到

typedef struct {
    int key;
    int val;
    int time;
} LRUCache;

int g_cap; // 全局变量记录缓存容量
int g_time; // 利用全局变量更新put和get操作时关键值的time
int g_cnt; // 全局变量记录当前缓存利用了多少

LRUCache* lRUCacheCreate(int capacity) {
    g_cap = capacity;
    g_time = 0;
    g_cnt = 0;
    LRUCache *obj = (LRUCache*)malloc(sizeof(LRUCache) * capacity);
    return obj;
}

int lRUCacheGet(LRUCache* obj, int key) {
    for (int i = 0; i < g_cnt; i++) {
        if (obj[i].key == key) { // 在缓存中存在key
            obj[i].time = ++g_time; // 重要,更新time
            return obj[i].val;
        }
    }
    return -1; // 缓存中不存在key
}

void lRUCachePut(LRUCache* obj, int key, int value) {
    LRUCache *last = NULL; // 最久没有操作的key
    int t = INT_MAX; // t用来记录最久没有操作的key的时间点,显然越小越久
    ++g_time; // 不管缓存满不满都要put当前的key,所以time肯定得更新
    for (int i = 0; i < g_cnt; i++) {
        if (t > obj[i].time) { // 更新最久没有操作过的key
            t = obj[i].time;
            last = obj + i;
        }
        if (obj[i].key == key) { // 缓存中存在key,更新value和time即可
            obj[i].val = value;
            obj[i].time = g_time;
            return;
        }
    }
    if (g_cnt == g_cap) { // 缓存满了,且没有key,则将最久没操作的key覆盖
        last->key = key;
        last->val = value;
        last->time = g_time;
        return;
    }
    obj[g_cnt].key = key; // 缓存没满,且没有key,直接加入即可
    obj[g_cnt].val = value;
    obj[g_cnt++].time = g_time;
}

void lRUCacheFree(LRUCache* obj) {
    free(obj);
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Leetcode_146. LRU 缓存 的相关文章

随机推荐

  • 在做课设时,用到的一个创建作业功能

    再做一个图书借阅系统的课设时 因为需要在数据库里实时更新某个人当前借阅图书的逾期天数 需要每次打开电脑都获取当前日期 再减去应还书日期 当时一直想不到一个很好的解决方法 然后在网上查了些资料 说是要用到sql server 创建作业的办法
  • Python实现自动化办公

    人工智能 AI 是当今世界最为热门的话题之一 而Python是从事AI领域最为流行的编程语言 在本文中 我将介绍如何使用Python实现自动化办公和处理工资表等知识教程 帮助您从零入门人工智能Python 一 制作Excel可视化报表 在传
  • 使用Jmeter进行性能测试

    文章目录 一 性能测试 性能测试介绍 性能指标QPS 每秒查询率 性能指标TPS 每秒处理的事务数目 QPS和TPS的不同点 二 Jmeter性能测试案例 三 Jmeter性能测试结果分析 1 如何得到可靠的测试报告 2 运行实际负载测试时
  • php苹果内购验证,苹果内购凭据验证工具(苹果支付,苹果内购,凭据解析)

    use sn01615 iap ios Verify include vendor autoload php cc new Verify receipt 凭据 cc gt endpoint true 可选 切换到沙盒环境 cc gt set
  • 生草shader的几种方法总结

    草地shader一直是shader效果的热门主题 实现草地效果 结合了集合绘制 顶点动画 光照很多shader编程的技巧 这里总结一下我在网上查到博客的几种实现方案 我居然拖了一年还没有写完 woc 反正也没有人看 先发一个 第一位是che
  • 怎么采集dedecms自定义内容模型

    有时我们需要用到dedecms提供的自定义内容模型功能去添加自定义内容模型来满足需求 那么dedecms自定义内同模型怎么添加采集规则呢 打开 dede templets co add step0 htm 找到如下代码 19行左右
  • 软考高级之系统架构师之企业应用集成EAI

    概述 在企业信息化建设的过程中 由于缺乏统一规划和总体布局 往往形成多个信息孤岛 信息孤岛使数据的一致性无法得到保证 信息无法共享和反馈 需要重复多次的采集和输入 信息孤岛是企业信息化一个重要的负面因素 其主要原因既有技术因素也有管理因素
  • 云服务器创建win10虚拟机吗,云服务器创建win10虚拟机

    云服务器创建win10虚拟机 内容精选 换一换 弹性云服务器 Elastic Cloud Server 以下简称ECS 是由CPU 内存 镜像 云硬盘组成的一种可随时获取 弹性可扩展的计算服务器 同时它结合VPC 虚拟防火墙 数据多副本保存
  • 深度优先搜索(DFS)

    算法入门 郭志伟 SYSU raphealguo at qq com 2012 05 12 1 前言 深度优先搜索 缩写DFS 有点类似广度优先搜索 也是对一个连通图进行遍历的算法 它的思想是从一个顶点V0开始 沿着一条路一直走到底 如果发
  • 记录一个接口. 接口同时传输参数和很多流的情况

    和一个保险系统的对接 文本类型的参数咱不多说 因为接口数据源是保险订单和保险理赔 所以需要传输一些图片和视频信息 比如说合同发票 定损图片和视频等等 这种需求的处理比较合适的方案是约定一个FTP SFTP服务器 然后参数中还传递文件的路径和
  • php的debug显示不全,【已解决】VSCode调试PHP时无法显示长字符串变量完整值

    折腾 未解决 php中用正则过滤html中code中多余span标签 期间 用VSCode去调试PHP期间 发现个问题 对于变量的值 如果很长的话 右键拷贝出来的值 只有一部分 不是完整的字符串 鼠标移动上去显示出来的效果 内容不完整 右键
  • oracle索引的监控

    author skatetime 2009 08 21 最近的研究发现 Oracle 数据库所使用的索引从来没有达到过可用索引数的1 4 或者其用法与其开始设计的意图不相同 未用的索引浪费空间 而且还会降低 DML 的速度 尤其是 UPDA
  • 警告: Exception encountered during context initialization - cancelling refresh attempt: org.springfram

    org springframework context support AbstractApplicationContext refresh 警告 Exception encountered during context initializ
  • 年终盘点一

    作者 阿里云云原生团队 受访嘉宾 阿里云智能 云原生 应用平台负责人 丁宇 阿里云智能容器服务负责人 易立 阿里云智能云原生应用平台产品负责人 李国强 阿里云智能中间件技术负责人 胡伟琪 阿里云智能Serverless研发负责人 杨皓然 Q
  • Mysql——使用字符集以及校对

    一 字符集 1 查看mysql支持的所有字符集 show character set 2 查看指定数据库的字符集 show variables like character 这八种情况分别对应 1 设置客户端使用的字符集 2 设置链接数据库
  • 如何将vscode设置成中文字体

    场景 最近不知道怎么的 vscode总是会自动跳回英文字体 明明已经下载过中文的字体了 解决方案 快捷键
  • PID调参过程详解(包括增量式和位移式)

    转载于https blog csdn net wangweijundeqq article details 76389770 位置闭环控制就是根据编码器的脉冲累加测量电机的位置信息 并与目标预设值做比较 得到控制偏差 然后通过对偏差的P比例
  • 容器查看与删除

    lcc lcc docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ad424be7a46b mysql docker entrypoint s About an
  • 部分手机拍照屏幕旋转, 导致imageview不能显示的问题???

    在项目开发的过程中 碰见了一个非常诡异的事情 拍照之后的imageview不能正常显示图片 从而导致十行代码中间的几句代码不执行 不执行 不执行 代码中包括imageview setImageBitmap bitmap 一度认为这个bitm
  • Leetcode_146. LRU 缓存

    C语言纯暴力解法 能AC我没想到 typedef struct int key int val int time LRUCache int g cap 全局变量记录缓存容量 int g time 利用全局变量更新put和get操作时关键值的