
剑指offer
文章平均质量分 50
dblinux
DBL && XLB
展开
-
缓存淘汰算法的实现与应用介绍(LRU,LFU)
缓存淘汰算法的实现与应用介绍(LRU、LFU)1. 梗概LRU:时间;每次将访问的key放到链表的最前面,若需要删除一个key,则删除的是链表最末尾的节点。LFU:频率;每访问一次key1,就给key1使用频率加一,频率越高,越排在链表的前面,越不容易被删除;若两个key访问频率一致,则最近访问的key排在前面。缺点:LFU容易饿,若有一种情况:某一段时间某一个key被访问了很多次,但后面几乎不被访问,但还是占据着链表的前面位置LRU:当存在热点数据时,LRU的效率很好,但偶发性的,周期性的批量操原创 2021-04-05 18:54:20 · 632 阅读 · 0 评论 -
#剑指offer Day5 # 分享两个题的其他解法
1. 栈的弹入、弹出序列题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)分析:要注意,千万别理解错了。别错误的认为,就一个栈,先进后出,我一下子全push进去,然后一下子全部pop出来!比如我push序列是1,2,3,4,5,那么我pop序列一定是原创 2021-03-22 23:10:19 · 127 阅读 · 0 评论 -
#剑指offer Day4 一类 “ 双指针 ”问题
#剑指offer Day4 一类 “ 双指针 ”问题1. 思路双指针有两种情况。第一种就是两个指针以相同速度向中间靠近,实行“夹逼准则”,适合有序数组的算法题(即下面所说的两种);第二种就是两个指针的运动速度不一样,即快慢指针,可以找出链表中环的开始位置。2. 实例剑指offer 41题:输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。//开始还在纠结乘积最小,后来转念一想,a+b=sum,a和b越远乘积越小,而一头一原创 2021-03-16 22:55:36 · 158 阅读 · 0 评论 -
#剑指offer Day3 一类 “ 斐波那契 ”问题
#剑指offer Day3 一类 “ 斐波那契 ”问题1. 思路斐波那契(Fibonacci)数列是经典的递归问题。可由下式表示:F(n)={0,n=01,n=1F(n−1)+F(n−2),n>=2F(n)=\begin{cases} 0,n=0\\ 1, n=1 \\ F(n - 1) + F(n-2), n>=2\end{cases} F(n)=⎩⎪⎨⎪⎧0,n=01,n=1F(n−1)+F(n−2),n>=2但要注意:递归方便书写,但是递归要是很深的话,有可能造成栈原创 2021-03-11 23:15:42 · 192 阅读 · 0 评论 -
#剑指offer Day2 一类可以用“框架”快速搞定的二叉树问题
#剑指offer# Day2 一类可以用“框架”快速搞定的二叉树问题1. 框架二叉树是最容易培养框架思维的,大部分的常考算法本质上都是二叉树的遍历问题。废话不多说,框架如下:class TreeNode{ int val; TreeNode left, right;}void Traverse(TreeNode root){ Traverse(root.left); Traverse(root.right); // 构造成 前序、中序和后序遍历}这类问题的总原创 2021-03-10 20:47:32 · 91 阅读 · 0 评论 -
#剑指Offer Day1 单向链表中倒数第k个节点
剑指Offer1. 单向链表中倒数第k个节点1. 思路 拿到这题,首先最能够想到的是:要想得到倒数第k个节点,但是我只有一个头指针,所以我只能先从头到尾遍历一遍,看看总节点的个数(假设为n),然后再从头遍历(n-k)次即可。这样的话,你总共需要遍历两次,时间上有开销!不过,这也不失为一种解决方案啊!先想出来一个再说,然后跟面试官沟通交流,寻找更优方案。/* 节点定义为:struct ListNode{ int value; ListNode* next;}; */ListNode*原创 2021-03-06 20:40:09 · 118 阅读 · 0 评论