算法总结
文章平均质量分 79
m0_60360320
这个作者很懒,什么都没留下…
展开
-
分治算法浅谈(js角度)
算法世界是一个增加知识以及增加思想的地方。深入学习算法,可以从底层夯实自己的编程能力和解决问题的能力。今天来谈一谈经典算法之一——分治法。分治的核心思想:将一个大问题(多重计算),一步一步(递归)分解为原子问题(简单计算),再进行合并(连接)。伪代码模板:function divideAndConquer(参数列表){ if(分割终止条件){ return } 分割操作(比如中间分割) const left const right原创 2021-11-01 22:52:30 · 165 阅读 · 0 评论 -
单调栈算法浅谈(javaScript角度)
这是栈这个数据结构特殊的表现形式,主要就是从栈顶到栈底的存储拥有一个递增或者递减的规则。单调栈思想模板:维护一个递增或者递减的stack,找出stack具体存什么(下标或者项数值),单调数据存入栈中,遇到非单调数据就出栈,以及其他的一些计算操作,并且直到栈种的数据重新回归单调。更新栈后继续遍历。伪代码:function monotoneStack(数据参数){ const stack = [] 定义一个结果容器 for(遍历数据){ while.原创 2021-10-04 18:10:37 · 507 阅读 · 0 评论 -
从股票买卖引申出来的几种思想(面试必看)
股票买卖这个算法话题可以说是在基础算法这一块是一个很有意思的存在了。题目稍微变一些或许就回要以完全不同的眼光去看待这个问题。话不多说,一起来看看...给定一个数组 prices ,它的第i 个元素prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。输入:[7,1,5,3,6,4]输出:5...原创 2021-10-03 22:32:39 · 127 阅读 · 0 评论 -
从全排列引申出来的算法——回溯DFS
回溯思想简单来说:从一条路往前走,能进则进,不能进则退回来,换一条路再试。当然这样也太抽象了,运用在算法里面的思想就是转化为树和图。回溯法思路的简单描述是:把问题的解空间转化成了图或者树的结构表示,然后使用深度优先搜索策略进行遍历,遍历的过程中记录和寻找所有可行解或者最优解。和动态规划一样,也有一个三板斧:1.dfs函数参数的确定2.确定递归终止条件3.确定单层搜索逻辑回溯算法适合:由多个步骤组成的问题,并且每个步骤都有多个选择项,所有就是类似一个树形结构。如果总结一下的话.原创 2021-09-26 14:29:45 · 287 阅读 · 0 评论 -
关于一维/二维数组动态规划的思考(javaScript角度)
动态规划思想是从运筹学上渗透下来的,用来求解某种有最优性质解的问题。首先得满足三大性质:1.最优解原理,问题包含的最优解子问题也是最优的2.无后效性,即是先前状态的确定后,将不会再受之后状态的影响。3.有重叠子问题,先前状态的解在之后会被用到(但是这个不是必需的)因此,解题的步骤也比较有“技巧性”的分为几步:划分阶段:按照问题的时空特征,将问题划分为有序的几个阶段。确定状态变量:将各个阶段用不同的状态表示出来。写出状态转移方程:根据上一阶段的状态推导出本阶段的状态。寻找边界条原创 2021-09-25 17:57:06 · 557 阅读 · 0 评论