按照方法分类
(八)模拟:
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,前后指针。
- 用哈希双链表——unordered_map存的键值对是<key,node>。node里存了key,value,前后指针。