Greedy 贪心算法
贪心算法概念
- 每一步中都采取当前状态下最好或最优的解法,从而使全局解法最优
- 与动态规划的不同是,他对于每个子问题的解决方案都会做出选择,不能回退。而动态规划则会保存之前的运算结果 ,并根据以前的结果对当前进行选择,能够退回
- 所有子方案最优不一定能全局最优
- 对于工程和生活中的问题贪心算法一般不能得到我们想得到的答案
什么时候使用贪心算法
- 问题能够分成最优子问题来解决,子问题的最优解能递推到最终问题的最优解,也就是最优子结构问题
- 可以解决最优化的问题,如求图中最小生成树,求哈夫曼编码等
- 因为贪心算法的高效性 可作为辅助算法或者直接解决一些要求结果不特别精确的问题
题解
1 买卖股票的最佳时机 II
var maxProfit = function(prices) {let cnt = 0;let len = prices.length;for (let i = 1; i < len; i++) {let temp = prices[i] - prices[i - 1];if (temp > 0) cnt+=temp;}return cnt;
};
2 860. 柠檬水找零
/*** @param {number[]} bills* @return {boolean}*/
var lemonadeChange = function (bills) {let hand = [];while (bills.length) {let money = bills.shift();if (money === 5) {hand.push(money);} else {hand.sort((a, b) => b - a); // 降序let change = money - 5; // 找零for (let i = 0, len = hand.length; i < len; i++) {if (hand[i] <= change) {change -= hand[i];hand.splice(i, 1);i--; // 数组发生删除,长度改变,要维持刚才的i不变}if (change === 0) {break;}}if (change !== 0) {return false;} else {hand.push(money);}}}return true;
};
Greedy 贪心算法相关推荐
- 用java单源最短路径问题_单源最短路径-贪心算法
单源最短路径,关于这个问题的贪心算有点不好理解,分析后续补充,代码也需要后续优化,便于理解 package test; import java.util.ArrayList; import java. ...
- 贪心算法-数列极差问题(对前篇文章的修改)
package com.work.home_3_1; import java.util.Arrays; /** * 贪心算法-数列极差问题 * 1. 问题描述: * N个正数数列 ...
- 动态规划(Dynamic Programming)与贪心算法(Greedy Algorithm)
文章目录 动态规划算法(Dynamic Programming) 动态规划问题的属性 应用实例:最长公共子序列问题(Longest Common Subsequence, LCS) 贪心算法(Gree ...
- 贪心算法(Greedy Algorithms)
1.贪心法的设计思想 贪心算法在解决问题的策略上目光短浅, 只根据当前已有的信息就做出选择,而且 一旦做出了选择,不管将来有什么结果,这个选择都不会改变.换言之,贪心法并不是从整体最优考虑,它所做出的 ...
- 贪心算法(Greedy)
贪心算法(Greedy) 贪心策略,也称为贪婪策略 每一步都采取当前状态下最优的选择(局部最优解),从而希望推导出全局最优解. 贪心的应用 ①.哈夫曼树 ②.最小生成树算法:Prim.Kruskal ...
- 贪心算法(Greedy Algorithm)最小生成树 克鲁斯卡尔算法(Kruskal#39;s algorithm)
克鲁斯卡尔算法(Kruskal's algorithm)它既是古典最低的一个简单的了解生成树算法. 这充分反映了这一点贪心算法的精髓.该方法可以通常的图被表示.图选择这里借用Wikipedia在.非常 ...
- 【控制】贪心算法(GA,Greedy Algorithm)及 Matlab 实现
文章目录 算法思路 应用实例 仿真 Ref. 算法思路 贪心算法一般按如下步骤进行: 建立数学模型来描述问题. 把求解的问题分成若干个子问题. 对每个子问题求解,得到子问题的局部最优解. 把子问题的解 ...
- 贪心算法(Greedy Algorithm)之霍夫曼编码
文章目录 1. 贪心算法 2. 应用 2.1 找零钱 2.2 区间覆盖 2.3 霍夫曼编码 霍夫曼编码完整代码 1. 贪心算法 我们希望在一定的限制条件下,获得一个最优解 每次都在当前的标准下做出当下 ...
- 贪心算法|Greedy Algorithms(背包问题)
贪心算法是一种用于优化问题的简单.直观的算法.该算法在寻找整体最优解的过程中,每一步都进行最优选择.贪心算法在一些问题上是非常成功的,例如用于压缩数据的霍夫曼编码,或者用于通过图寻找最短路径的Dijk ...
- 贪心算法(Greedy Algorithm)
参考: 五大常用算法之三:贪心算法 算法系列:贪心算法 贪心算法详解 从零开始学贪心算法 一.基本概念: 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以 ...
最新文章
- 深度学习要点———神经网络的类型
- web项目html引入css文件路径,详解Webpack和Webpack-simple中如何引入CSS文件_旧店_前端开发者...
- 每周一书《Spark与Hadoop大数据分析》分享!
- FastDFS的安装
- Android之解决主页面Activity监听fragment退出问题(由NavHostFragment和RxFragment一起管理fragment)
- 新手学习C语言编程的8个致命错误,你中招了吗?
- 项目实战,平均负载过高,最后发现却是这个搞鬼
- 天地图专题一:加载天地图
- 比尔盖茨:希望我们的家庭能够获得空间和隐私
- POJ3250 Bad Hair Day【单调递减队列+堆栈】
- 微信小程序实现商品数量加减案例
- 一个js内存泄露的好例子
- mysql jdbc 5.6_mysql5.6 jdbc驱动官网下载|
- QT 弹出pdf 或者网页【软件 help/about按钮】
- 收藏不迷路 —— Flutter 转场动效大合集
- bzoj 2298 problem a
- 进入人工智能行业有哪些方法?
- Mac远程windows服务器
- 支付宝七(商户会员卡之发放卡券)
- MVP进阶及OKHttp上传图片