0%

缓存淘汰算法

缓存是为了解决存储介质间读写速度相差过大而设置的一块大小有限的数据缓存区。经由缓存中转,可极大地提高数据的读写速度,从而提高系统性能。由于缓存大小有限,当存储的数据达到其大小限制时就需要淘汰掉其中一部分“价值最小”的数据,从而使其可以装入新的数据。这就是缓存淘汰算法的工作。缓存淘汰算法在计算机科学中应用十分广泛,从最底层的硬件到最上层的应用层都有着它的身影。例如缓和CPU和内存间速度差异的Cache,操作系统层的虚拟内存,应用层的缓存中间件等等。不同的评判数据价值的方式催生了不同的缓存淘汰算法,常见的有FIFO、LRU、LFU等。本文将结合两道题目分析LRU和LFU两种缓存淘汰算法。

阅读全文 »

今天Leetcode的每日一题是实现一个atoi函数,其中要求当参数大于INT_MAX或小于INT_MIN时返回INT_MAX或INT_MIN。做题时突然发现自己对如何通过位运算得到INT_MAX和INT_MIN还一知半解,因此决定探索一下。

阅读全文 »

题意

一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接。在每次预约服务之间要有休息时间,因此她不能接受相邻的预约。给定一个预约请求序列,替按摩师找到最优的预约集合(总预约时间最长),返回总的分钟数。

示例 1:

1
2
3
输入: [1,2,3,1]
输出: 4
解释: 选择 1 号预约和 3 号预约,总时长 = 1 + 3 = 4。

示例 2:

1
2
3
输入: [2,7,9,3,1]
输出: 12
解释: 选择 1 号预约、 3 号预约和 5 号预约,总时长 = 2 + 9 + 1 = 12。

示例 3:

1
2
3
输入: [2,1,4,5,3,1,1,3]
输出: 12
解释: 选择 1 号预约、 3 号预约、 5 号预约和 8 号预约,总时长 = 2 + 4 + 3 + 3 = 12。
阅读全文 »

题意

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:

1
2
3
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

示例 2:

1
2
3
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

示例 3:

1
2
3
4
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
阅读全文 »