算法
文章平均质量分 93
vXZH
这个作者很懒,什么都没留下…
展开
-
手撕LFU算法
LFU(least frequently used (LFU) page-replacement algorithm)。即最不经常使用页置换算法,要求在页置换时置换引用计数最小的页,因为经常使用的页应该有一个较大的引用次数。LFU 算法相当于是淘汰访问频次最低的数据,如果访问频次最低的数据有多条,需要淘汰最旧的数据。把数据按照访问频次进行排序,而且频次还会不断变化,这也是其相较于LRU更难的原因。其实他们逻辑都是固定的,问题在于如何写出高效优雅的代码。我们为get/put这两种操作设计时间复杂度为.原创 2021-02-04 18:58:23 · 461 阅读 · 0 评论 -
手撕LRU算法
LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最久未使用的页面予以淘汰。LRU是一种缓存淘汰策略,它认为最近使用的数据就是有用的,最久没使用的数据就是没用的,所以在当容量满了之后,会先淘汰掉最久没使用的数据,腾出空间来放新数据。LeetCode的146题就要求我们设计这样一个类,要求我们在O(1)时间复杂度内完成。根据LRU的定义,我们总结出LRU的操作规则:在使用数据(get/put)后,那么该数据就是最近使用的。当容量满了之后,要删.原创 2021-02-04 11:07:20 · 429 阅读 · 0 评论 -
通用解法团灭LeetCode股票买卖问题
本文受labuladong-团灭 LeetCode 股票买卖影响,在其基础上增加了自己的阐述,方便理解在LeetCode上有这么6道买卖股票的问题,如果你单独去看每道题的题解,可能会觉得这好像是不同的6道题,而且有的解法很精巧,不可能在短时间内想到。其实这6道题都是同一道题(买卖股票的最佳时机 IV)的变种,如果这道题我们会了,那么就可以一举把这6题都拿下。那么接下来我们来看看如何解这道“始祖”题。这里要注意:一笔交易是指从买入股票到卖出的整个过程。我们先来看一下为什么这道题能用动态规划求解.原创 2021-02-02 16:58:49 · 538 阅读 · 0 评论 -
LeetCode 416.分割等和子集 【超详细解答】
LeetCode 416.分割等和子集1. 问题描述2. 解法分析2.1 状态和选择2.2 dp数组的定义2.3 状态转移的逻辑2.4 处理边界情况2.5 初步代码3. 状态压缩/代码优化1. 问题描述这是一道经典的0-1背包问题变种,但是更简单一些。首先我们回顾一下背包问题:给你N个物品和一个可装载重量为W的背包,每个物品有重量和价值两个属性。其中第i个物品的重量为wt[i],价值为val[i],现在让你用这个背包装物品,能装的最大价值是多少?那么我们这道题如何转换成上述的背包问题呢?N原创 2021-01-16 16:14:18 · 1299 阅读 · 1 评论