贪心算法概念

  1. 每一步中都采取当前状态下最好或最优的解法,从而使全局解法最优
  2. 与动态规划的不同是,他对于每个子问题的解决方案都会做出选择,不能回退。而动态规划则会保存之前的运算结果 ,并根据以前的结果对当前进行选择,能够退回
  3. 所有子方案最优不一定能全局最优
  4. 对于工程和生活中的问题贪心算法一般不能得到我们想得到的答案

什么时候使用贪心算法

  1. 问题能够分成最优子问题来解决,子问题的最优解能递推到最终问题的最优解,也就是最优子结构问题
  2. 可以解决最优化的问题,如求图中最小生成树,求哈夫曼编码等
  3. 因为贪心算法的高效性 可作为辅助算法或者直接解决一些要求结果不特别精确的问题

题解

1 买卖股票的最佳时机 II

方案:

  1. 从最低点买入,从最高点卖出
  2. 从低点买入,只要赚钱就卖出,不断买卖
  3. 从低点买入,到价格高点卖出,不断买卖
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. 柠檬水找零

策略:

  1. 不区分金额直到找到足够的零钱
  2. 给钱找零,优先给金额大的零钱,尽量把零钱放手里,多次找零
/*** @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 贪心算法相关推荐

  1. 用java单源最短路径问题_单源最短路径-贪心算法

    单源最短路径,关于这个问题的贪心算有点不好理解,分析后续补充,代码也需要后续优化,便于理解 package test; import java.util.ArrayList; import java. ...

  2. 贪心算法-数列极差问题(对前篇文章的修改)

    package com.work.home_3_1; import java.util.Arrays; /**  * 贪心算法-数列极差问题  * 1. 问题描述:  *         N个正数数列 ...

  3. 动态规划(Dynamic Programming)与贪心算法(Greedy Algorithm)

    文章目录 动态规划算法(Dynamic Programming) 动态规划问题的属性 应用实例:最长公共子序列问题(Longest Common Subsequence, LCS) 贪心算法(Gree ...

  4. 贪心算法(Greedy Algorithms)

    1.贪心法的设计思想 贪心算法在解决问题的策略上目光短浅, 只根据当前已有的信息就做出选择,而且 一旦做出了选择,不管将来有什么结果,这个选择都不会改变.换言之,贪心法并不是从整体最优考虑,它所做出的 ...

  5. 贪心算法(Greedy)

    贪心算法(Greedy) 贪心策略,也称为贪婪策略 每一步都采取当前状态下最优的选择(局部最优解),从而希望推导出全局最优解. 贪心的应用 ①.哈夫曼树 ②.最小生成树算法:Prim.Kruskal ...

  6. 贪心算法(Greedy Algorithm)最小生成树 克鲁斯卡尔算法(Kruskal#39;s algorithm)

    克鲁斯卡尔算法(Kruskal's algorithm)它既是古典最低的一个简单的了解生成树算法. 这充分反映了这一点贪心算法的精髓.该方法可以通常的图被表示.图选择这里借用Wikipedia在.非常 ...

  7. 【控制】贪心算法(GA,Greedy Algorithm)及 Matlab 实现

    文章目录 算法思路 应用实例 仿真 Ref. 算法思路 贪心算法一般按如下步骤进行: 建立数学模型来描述问题. 把求解的问题分成若干个子问题. 对每个子问题求解,得到子问题的局部最优解. 把子问题的解 ...

  8. 贪心算法(Greedy Algorithm)之霍夫曼编码

    文章目录 1. 贪心算法 2. 应用 2.1 找零钱 2.2 区间覆盖 2.3 霍夫曼编码 霍夫曼编码完整代码 1. 贪心算法 我们希望在一定的限制条件下,获得一个最优解 每次都在当前的标准下做出当下 ...

  9. 贪心算法|Greedy Algorithms(背包问题)

    贪心算法是一种用于优化问题的简单.直观的算法.该算法在寻找整体最优解的过程中,每一步都进行最优选择.贪心算法在一些问题上是非常成功的,例如用于压缩数据的霍夫曼编码,或者用于通过图寻找最短路径的Dijk ...

  10. 贪心算法(Greedy Algorithm)

    参考: 五大常用算法之三:贪心算法 算法系列:贪心算法 贪心算法详解 从零开始学贪心算法 一.基本概念: 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以 ...

最新文章

  1. 深度学习要点———神经网络的类型
  2. web项目html引入css文件路径,详解Webpack和Webpack-simple中如何引入CSS文件_旧店_前端开发者...
  3. 每周一书《Spark与Hadoop大数据分析》分享!
  4. FastDFS的安装
  5. Android之解决主页面Activity监听fragment退出问题(由NavHostFragment和RxFragment一起管理fragment)
  6. 新手学习C语言编程的8个致命错误,你中招了吗?
  7. 项目实战,平均负载过高,最后发现却是这个搞鬼
  8. 天地图专题一:加载天地图
  9. 比尔盖茨:希望我们的家庭能够获得空间和隐私
  10. POJ3250 Bad Hair Day【单调递减队列+堆栈】
  11. 微信小程序实现商品数量加减案例
  12. 一个js内存泄露的好例子
  13. mysql jdbc 5.6_mysql5.6 jdbc驱动官网下载|
  14. QT 弹出pdf 或者网页【软件 help/about按钮】
  15. 收藏不迷路 —— Flutter 转场动效大合集
  16. bzoj 2298 problem a
  17. 进入人工智能行业有哪些方法?
  18. Mac远程windows服务器
  19. 支付宝七(商户会员卡之发放卡券)
  20. MVP进阶及OKHttp上传图片

热门文章

  1. 数据库第九章习题作业
  2. 浏览器网页怎么实现文档、小票自动静默打印?【深度】
  3. 氮化镓 服务器电源管理系统报价,氮化镓(GaN)技术推动电源管理不断革新
  4. 批量webp格式转换成jpg操作方法
  5. CSS动画效果(animation属性)解析
  6. 编程大佬行为准则:一杯茶一包烟,一行代码写一天
  7. LCD1602_3.3V
  8. 元气骑士如何获得机器人成就皮肤_元气骑士成就系统攻略 成就获取方法一览...
  9. 记一次npm发包失败的经历
  10. 视频分割合并软件哪个好用:试试Fast Video Cutter Joiner吧