算法题总结(十二)

本文介绍了三种常见的数据处理方法:旋转数组的实现,螺旋矩阵的顺时针旋转策略,以及LRU缓存的设计。旋转数组通过新建vector完成,螺旋矩阵通过找到旋转后的坐标规律或暴力交换实现。LRU缓存利用链表和哈希表结合,确保最近使用的数据在前,当缓存满时淘汰最不常使用的数据。该文深入探讨了这些算法的实现细节和效率分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

按照方法分类

(八)模拟:

1、 旋转数组

  • 新建一个vector,先加入后面(n-m,n)的m个元素,然后加入前面n-m个元素即可;
  • m%=n;
  • 避免m>n的情况

2、 螺旋矩阵:

  • 顺时针旋转矩阵:找到规律——对于原矩阵mat[i][j],旋转后该值应该在新矩阵ans[j][n-i-1];
  • 或者直接暴力解,沿着对角线交换,然后再一次交换内部的。

3、 设计LRU缓存结构

(1)定义
  • LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。
(2) 第一种
  • 定义
    • 使用一个链表保存缓存数据。将新数据插入到链表头部;
    • 每当缓存命中(即缓存数据被访问),则将数据移到链表头部;
    • 当链表满的时候,将链表尾部的数据丢弃。
  • 命中率
    • 当存在热点数据时,LRU的效率很好,但偶发性的、周期性的批量操作会导致LRU命中率急剧下降,缓存污染情况比较严重。
    • 缓存污染是指操作系统将不常用的数据从内存移到缓存,造成常用数据的挤出,降低了缓存效率的现象
  • 代价
    • 命中时需要遍历链表,找到命中的数据块索引,然后需要将数据移到头部。
  • 实现
    • 用哈希双链表——unordered_map存的键值对是<key,node>。node里存了key,value,前后指针。在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值