
五大经典算法
yanerhao
信雅之言,微言大意
展开
-
GO实现leetcode 股票利润最大化问题-动态规划
1 只允许一次交易,一次交易func maxProfit(prices []int) int { /* 动态规划 dp[i][j]代表第i天j状态(j=0表示当天不持有股票,=1则表示持有)下持有现金情况(如果是买入则为负数,卖出则是正数): 转移方程: 1第i天不持有股票,则存在两种情况: 1.1 昨天不持有,当日不做什么 1.2 昨天持有,当日卖出 dp[i][0]=max(dp[i-1][0],dp[i-1][1]+p[i])原创 2021-01-24 20:06:38 · 360 阅读 · 0 评论 -
五大经典算法之三动态递归DP
五大经典算法 动态递归DP首先需要决定存储什么历史信息,以及用什么数据结构来存储。然后最重要的就是递推公式,最后需要考虑起始条件的值。我们用dp[i]表示到字符串s的第i个元素为止能不能用字典里的词表示。假设已经知道dp[0,1,,,,i-1]的结果,要求dp[i]Leetcode 139. Word Break要求一个非空字符串s,一个非空的字符串词典,判断s能够通过空格组成原创 2017-04-10 15:49:25 · 3016 阅读 · 0 评论 -
五大经典算法二 回溯
回溯算法在解决多选择问题时特别有效,一般思路如下:在当前场景下,存在若干种选择去操作,有可能两种结果:一是违反相应条件限制,只能返回(back),另一种是该选择选到最后居然正确并结束。故在回溯时存在三要素,能总结出这样的三要素问题便可以迅速解决:1 找到选择2 限制条件,即选择操作在此条件下才进行3 结束回溯在迷宫问题等应用广泛,下面的Leetcode22题Generate Par原创 2017-03-30 22:42:19 · 12648 阅读 · 1 评论 -
五大经典算法之四贪心算法
基本概念: 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择,贪心策略使用的前提是局部最优能导致全局最优。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性,即某个状态以后的过程不会影响以前的状态,只与当前状态原创 2017-04-13 23:24:38 · 20472 阅读 · 1 评论 -
五大经典算法一 递归与分治
递归算法:直接或者间接不断反复调用自身来达到解决问题的方法。要求原始问题可以分解为相同问题的子问题。、需要:1 递归边界 2 自身调用特点分析:递归思路简单清晰,如果分析出将很快得到结果;递归将多次调用,使用到堆栈,算法效率低,费时费内存。常用场景:阶乘,斐波纳契数列、汉诺塔问题,整数划分,枚举排列及二叉树,图的搜索相关问题。例题1 Hanoi问题有三根杆子A,B,原创 2017-03-21 12:06:30 · 12606 阅读 · 1 评论