本文转载自微信公众号「JS每日一题」,面试作者灰灰。官说转载本文请联系JS每日一题公众号。说对算法算法 贪心算法,回溯又称贪婪算法,解应景是用场算法设计中的一种思想 其期待每一个阶段都是局部最优的选择,从而达到全局最优,面试但是官说结果并不一定是最优的 举个零钱兑换的例子,如果你有1元、说对算法算法2元、贪心5元的回溯钱币数张,用于兑换一定的解应景金额,但是用场要求兑换的钱币张数最少 如果现在你要兑换11元,按照贪心算法的面试思想,先选择面额最大的5元钱币进行兑换,那么就得到11 = 5 + 5 + 1 的选择,这种情况是最优的网站模板 但是如果你手上钱币的面额为1、3、4,想要兑换6元,按照贪心算法的思路,我们会 6 = 4 + 1 + 1这样选择,这种情况结果就不是最优的选择 从上面例子可以看到,贪心算法存在一些弊端,使用到贪心算法的场景,都会存在一个特性: 一旦一个问题可以通过贪心法来解决,那么贪心法一般是解决这个问题的最好办法 至于是否选择贪心算法,主要看是否有如下两大特性: 回溯算法,也是算法设计中的一种思想,是一种渐进式寻找并构建问题解决方式的策略 回溯算法会先从一个可能的工作开始解决问题,如果不行,就回溯并选择另一个动作,知道将问题解决 使用回溯算法的问题,有如下特性: 常见的伪代码如下: 重点解决三个问题: 例如经典使用回溯算法为解决全排列的问题,如下: 一个不含重复数字的源码下载数组 nums ,我们要返回其所有可能的全排列,解决这个问题的思路是: 用代码表示则如下: 前面也初步了解到分而治之、动态规划,现在再了解到贪心算法、回溯算法 其中关于分而治之、动态规划、贪心策略三者的求解思路如下: 其中三者对应的经典问题如下图: 参考文献 https://zh.wikipedia.org/wiki/%E8%B4%AA%E5%BF%83%E7%AE%97%E6%B3%95 https://leetcode-cn.com/problems/permutations/solution/dai-ma-sui-xiang-lu-dai-ni-xue-tou-hui-s-mfrp/ https://cloud.tencent.com/developer/article/1767046一、贪心贪心算法
二、回溯算法
三、总结