普里姆算法 Prim
摘要:普里姆算法 Prim 原先一直没注意这个算法,一直以为迪杰斯特拉可以解决相关问题。后来发现迪杰斯特拉必须要有起点,否则就gg了。而这也是迪杰斯特拉和普里姆的最大区别。 算法简述 普里姆算法的本质是贪心。 总体上将所有节点分成两类:已确定从起点到该节点最短路长度的节点以及未确定从起点到该节点最短路长度
阅读全文
买卖股票的最佳时机
摘要:这是一个系列,也是dp经典题,特别写篇博客。 leetcode 121 买卖股票的最佳时机 简单 只能买卖一次股票,那只需要从第一天开始一次遍历,不停地更新买的最低价和能赚到的最大利润即可。 参考代码 class Solution { public: int maxProfit(vector<int
阅读全文
正则表达式
摘要:每次学每次忘。 常用的一些表达式。 1.匹配一个确定的单词,比如word 大小写不敏感: /\b[wW][oO][rR][dD]\b/ or /\bword\b/i 2.金额价格匹配 /(1-9?(.[0-9]{1,2})?\()|(^(0){1}\))|([0-9].0-9?$)/
阅读全文
动态规划 dynamic programming
摘要:动态规划 dynamic programming 动态规划,不用多说了,程序员进阶必然遇到的障碍。 算法简述 稍微了解过动态规划的都知道动态规划有四个要素:状态,状态转移方程,初始化,后处理。 但事实上很多时候难点在于根本就找不到这些东西。 因此,笔者力求从另一个角度,直接把dp分类,找到一类题的共
阅读全文
单调栈 Monotonous
摘要:单调栈 虽然看上去而且几乎所有人都认为这属于数据结构,但我认为其本质更像是一种算法思想。网上搜索得到的资料还是蛮多,其代码也不难理解。满足单调性就入栈,不满足就把不满足单调性的全部弹出栈。那么为什么作者还要重复讲这个东西呢?因为网上资料大多通过例题讲述,然而笔者愚笨,看完一题只能会这一题,触类旁通似
阅读全文
拓扑排序
摘要:拓扑排序 说实话这个名字真的很高大上,第一次接触应该是在离散数学里。数据结构在讲图的时候也提过一次。 那么,在生活中有什么运用呢?比较典型的就是课程表,譬如大学物理的先修课程是高等数学,那么大学物理就必须要在高等数学之后上,而大学物理如果和马克思主义基本原理没什么关系的话,那你就可以在修完高等数学后
阅读全文
迪杰斯特拉算法 Dijkstra
摘要:迪杰斯特拉算法 Dijkstra 这大概是算法里名字最难记的了,不管是英文还是中文。不知道是不是受某品牌影响,笔者老是记成“迪杰特斯拉算法”。 算法简述 迪杰斯特拉算法的本质是贪心。 总体上将所有节点分成两类:已确定从起点到该节点最短路长度的节点以及未确定从起点到该节点最短路长度的节点。 每次从尚未
阅读全文
可复用的代码——快速选择
摘要:template<typename T> class Helper { static int partition(vector<T>& nums, int l, int r) { T pivot = nums[r]; int i = l - 1; for (int j = l; j <= r - 1
阅读全文