Ryan Blog

「离开世界之前 一切都是过程」

C++ LRU

"learning……"

人总是贪婪的,就像最开始,我也只是想知道你的名字。 LRU LRU(Least Recently Used,最近最少使用)缓存是一种常见的缓存淘汰策略,主要用于保持固定容量的缓存,当缓存满时,会淘汰最近最少使用的数据。 实现 实现思路: 用哈希表(unordered_map)存储键值对,实现 O(1) 访问。 用双向链表(list)维护访问顺序,最新访问的元素放到链表头...

C++ 二叉树和搜索树

"learning……"

虽有遗憾,并无后悔。 二叉树的遍历 递归实现三序遍历 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 #include <iostream> u...

动态规划

"learning……"

珍惜眼前的幸福,而不是去奢求无法得到的东西。 算法描述 “动态规划(Dynamic Programming, DP)在查找有很多重叠子问题的情况的最优解时有效。它将问题重新组合成子问题。为了避免多次解决这些子问题,它们的结果都逐渐被计算并被保存,从简单的问题直到整个问题都被解决。因此,动态规划保存递归时的结果,因而不会在解决同样的问题时花费时间 · · · · · · 动态规划只能...

回溯算法

"learning……"

就算风吹散了冰雪,想念也会留存下来。 算法描述 回溯法(backtracking)是优先搜索的一种特殊情况,又称为试探法,常用于需要记录节点状态的深度优先搜索。通常来说,排列、组合、选择类问题使用回溯法比较方便。顾名思义,回溯法的核心是回溯。在搜索到某一节点的时候,如果我们发现目前的节点(及其子节点)并不是需求目标时,我们回退到原来的节点继续搜索,并且把在目前节点修改的状态还原。这...

二分查找

"learning……"

两个囚犯从监狱里往外看,一个看到了泥土,一个看到了星星…… 重点 二分查找的核心是通过减半缩减查找的次数,最主要的思想应用在普通二分查找,快排分割,旋转数组。难点在于其灵活的变形。 算法描述 二分查找也常被称为二分法或者折半查找,每次查找时通过将待查找区间分成两部分并只取一部分继续查找,将查找的复杂度大大减少。对于一个长度为 O(n) 的数组,二分查找的时间复杂度为 O(log ...

搜索算法

"learning……"

人类的赞歌就是勇气的赞歌。 算法描述 深度优先搜索(DFS)和广度优先搜索(BFS)是两种最常见的优先搜索方法,它们被广泛地运用在图和树等结构中进行搜索。 DFS非递归实现可以利用stack,BFS非递归实现可以利用queue。 深度优先搜索 深度优先搜索(depth-first seach,DFS)在搜索到一个新的节点时,立即对该新节点进行遍历;因此遍历需要用先入后出的栈来实现...

数据结构与基础算法

"learning……"

高脚杯里喝可乐 双指针 快慢指针 滑动窗口 归并数组 高精度计算 一切皆可搜索 深搜DFS,分为树的搜索和图的搜索,一般通过递归实现,或者栈的实现 广搜BFS,分为树的搜索和图的搜索,一般用队列实现 djkstra 回溯 刷题记录 二分查找.编号704 递归实现 循环实现 数组移...

双指针

"learning……"

算法描述 双指针主要用于遍历数组,两个指针指向不同的元素,从而协同完成任务。也可以延伸到多个数组的多个指针。 若两个指针指向同一数组,遍历方向相同且不会相交,则也称为滑动窗口(两个指针包围的区域即为当前的窗口),经常用于区间搜索。 若两个指针指向同一数组,但是遍历方向相反,则可以用来进行搜索,待搜索的数组往往是排好序的。 双指针常有以下应用: 滑动窗口 数组归并 快慢指针 ...

各种排序算法

"learning……"

千奇百怪的排序算法 冒泡排序,无脑两两比较交换,稳定 选择排序,每次遍历将目标值(最大/最小)筛选出来填到预留位置(最前/最后),指针后移,不稳定,选择比冒泡比较次数少 插入排序,指针从第二个位置开始遍历,每次遍历将该数插入到前一段已经排好序的数组(数据后移),稳定,比选择排序比较次数少 希尔排序,插入排序+分组,先定gap,一般是长度除二,然后每一轮(gap-&...

贪心算法(Greedy Algorithm)

"learning……"

算法描述 贪心算法或贪心思想采用贪心的策略,保证每次操作都是局部最优的,从而使最后得到的结果是全局最优的。不回溯,直接选择。 步骤: 初始化:设定初始状态。 选择:在当前状态下选择一个局部最优的解。 问题约化:根据选择的局部最优解,减小问题的规模。 终止条件:检查是否已经到达问题的终止条件,若是,则返回结果;否则,返回第2步。 贪心算法能应用的问题: 活动选择问...