双栈实现队列
题目介绍请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 true ;否则,返回 false解题思路栈有个特...
双队列实现栈
题目介绍请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int top() 返回栈顶元素。boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。实现思路队列有个...
LFU缓存
介绍LFU缓存其实就是删除最不常用的缓存策略,例子如下缓存最大3个数,值为 [1,2,3]访问顺序: 1 1 1 2 2 3新增值时需要删除的值为3 因为3最访问了一次是最少的(即使他刚刚访问过)由此可见,相比较LRU缓存LFU更关注访问的次数而不是最近访问的啥,关于LRU缓存可以看我上一篇文章LRU缓存实现class LFUCache<T, U> {
private siz...
LRU缓存
介绍LRU缓存实际就是将最近最少使用的数据删除的缓存策略,举个例子缓存长度为3,目前有三个值分别是 [1, 2, 3]然后我们访问缓存的顺序为 1 1 1 2 3此时我们需要新增一个缓存,因为超过缓存长度所以我们需要先将1删除空出位置,因为最近访问了2和3,1是最早访问的故删除(即使他之前访问次数最多)实现因为get和put都需要O(1),因此我们采用哈希表来做,具体做法就是如果缓存命中,则...