0%

146,LRU缓存机制,medium

运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。

实现 LRUCache 类:

LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存

int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。

void put(int key, int value) 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字-值」。当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据值,从而为新的数据值留出空间。

进阶:你是否可以在 O(1) 时间复杂度内完成这两种操作?

阅读全文 »

前言

双指针分为快慢指针(向一个方向遍历)和左右指针(从两个方向相对遍历), 在进行数组排序时常用到第一种。

指针 j 用于探路,找到目标元素与指针 i 所指元素交换,并将 i 向前一步,继续。

模板
阅读全文 »

思路

一个二维矩阵从某个点开始向四周扩展,直到无法再扩展为止。

矩阵,可以抽象为一幅「图」,这就是⼀个图的遍历问题,也就类似⼀个 N 叉树遍历的问题。几行代码就能解决,直接上框架吧:

阅读全文 »

回溯算法

前言

「回溯是递归的副产品,只要有递归就会有回溯」,所以回溯法也经常和二叉树遍历,深度优先遍历(\(dfs\))混在一起,因为这两种方式都是用了递归。

回溯法就是暴力搜索,优化回溯算法只有「剪枝」一种方法。

回溯算法能解决如下问题:

阅读全文 »