0714.买卖股票的最佳时机含手续费

题目链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/

给定一个整数数组 prices,其中第i个元素代表了第i天的股票价格;非负整数fee代表了交易股票的手续费用。
你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。
返回获得利润的最大值。

注意:这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。

示例 1:
输入: prices = [1, 3, 2, 8, 4, 9], fee = 2
输出: 8
解释: 能够达到的最大利润:
在此处买入 prices[0] = 1
在此处卖出 prices[3] = 8
在此处买入 prices[4] = 4
在此处卖出 prices[5] = 9
总利润: ((8 - 1) - 2) + ((9 - 4) - 2) = 8.

注意:
* 0 < prices.length <= 50000.
* 0 < prices[i] < 50000.
* 0 <= fee < 50000.

思路:
本题相对于贪心算法:122.买卖股票的最佳时机II,多添加了一个条件就是手续费。

贪心算法:
在贪心算法:122.买卖股票的最佳时机II中使用贪心策略不用关心具体什么时候买卖,只要收集每天的正利润,最后稳稳的就是最大利润了。

而本题有了手续费,就要关系什么时候买卖了,因为计算所获得利润,需要考虑买卖利润可能不足以手续费的情况。

如果使用贪心策略,就是最低值买,最高值(如果算上手续费还盈利)就卖。

此时无非就是要找到两个点,买入日期,和卖出日期。

* 买入日期:其实很好想,遇到更低点就记录一下。
* 卖出日期:这个就不好算了,但也没有必要算出准确的卖出日期,只要当前价格大于(最低价格+手续费),就可以收获利润,至于准确的卖出日期,就是连续收获利润区间里的最后一天(并不需要计算是具体哪一天)。

所以我们在做收获利润操作的时候其实有三种情况:

* 情况一:收获利润的这一天并不是收获利润区间里的最后一天(不是真正的卖出,相当于持有股票),所以后面要继续收获利润。
* 情况二:前一天是收获利润区间里的最后一天(相当于真正的卖出了),今天要重新记录最小价格了。
* 情况三:不作操作,保持原有状态(买入,卖出,不买不卖)

java代码整体如下:

什么是贪心算法?

贪心的本质是选择每一个阶段的局部最优,从而达到全局最优。

举个例子:

假如钱包里有一堆钞票,你可以拿走5张,如果想要尽可能的拿到最大的金额,你要如何拿?

每次拿最大的,最终结果就是拿走最大的金额数。

每次拿最大的就是局部最优,最后拿走最大数额的钱就是推出全局最优。

0714.买卖股票的最佳时机含手续费【贪心算法】相关推荐

  1. 714. 买卖股票的最佳时机含手续费+贪心

    https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/ 题目要求 给定一个整数数组 pri ...

  2. LeetCode·714.买卖股票的最佳时机含手续费·贪心

    作者:xun-ge-v 链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/sol ...

  3. 力扣刷题day32|738单调递增的数字、714买卖股票的最佳时机含手续费、968监控二叉树

    文章目录 738. 单调递增的数字 思路 难点:遍历顺序 难点:设置flag 714. 买卖股票的最佳时机含手续费 贪心思路 难点 968. 监控二叉树 思路 难点:如何隔两个节点放一个摄像头 738 ...

  4. 力扣刷题day44|309最佳买卖股票时机含冷冻期、714买卖股票的最佳时机含手续费

    文章目录 309. 最佳买卖股票时机含冷冻期 思路 动态规划五部曲 714. 买卖股票的最佳时机含手续费 贪心思路 难点 动态规划思路 动态规划五部曲 309. 最佳买卖股票时机含冷冻期 力扣题目链接 ...

  5. _32LeetCode代码随想录算法训练营第三十二天-贪心算法 | 738.单调递增的数字 、714.买卖股票的最佳时机含手续费、968.监控二叉树

    _32LeetCode代码随想录算法训练营第三十二天-贪心算法 | 738.单调递增的数字 .714.买卖股票的最佳时机含手续费.968.监控二叉树 题目列表 738.单调递增的数字 714.买卖股票 ...

  6. 【算法】贪心算法:LeetCode 714 买卖股票的最佳时机含手续费 、LeetCode 968 监控二叉树

    LeetCode 714 买卖股票的最佳时机含手续费 (中等) 题目 描述 给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 :整数 fee 代表了交易股票的手续费用. 你 ...

  7. 【贪心算法】Leetcode 714. 买卖股票的最佳时机含手续费

    [贪心算法]Leetcode 714. 买卖股票的最佳时机含手续费 题目 给定一个整数数组 prices,其中 prices[i]表示第 i 天的股票价格 :整数 fee 代表了交易股票的手续费用. ...

  8. 代码随想录算法训练营第三十七天 | 738.单调递增的数字,714. 买卖股票的最佳时机含手续费,968.监控二叉树,总结

    Day36 周日休息~ 一.参考资料 单调递增的数字 https://programmercarl.com/0738.%E5%8D%95%E8%B0%83%E9%80%92%E5%A2%9E%E7%9 ...

  9. 算法训练第五十一天 | 309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费、股票问题总结

    动态规划part12 309.最佳买卖股票时机含冷冻期 题目描述 思路 总结 714.买卖股票的最佳时机含手续费 题目描述 思路 股票问题总结 309.最佳买卖股票时机含冷冻期 题目链接:309.最佳 ...

  10. 【LeetCode每日一题】——714.买卖股票的最佳时机含手续费

    文章目录 一[题目类别] 二[题目难度] 三[题目编号] 四[题目描述] 五[题目示例] 六[解题思路] 七[题目提示] 八[时间频度] 九[代码实现] 十[提交结果] 一[题目类别] 贪心算法 二[ ...

最新文章

  1. STM32-USART接收程序
  2. Qt 模型视图框架解读之模型
  3. java声明变量简单程序_零基础学编程之java变量
  4. Java内存管理文章合集
  5. 艾伟:ASP.NET实用技巧(一)
  6. 从外网给新建的Exchange 2007/2010分发通讯组发邮件失败
  7. JBUILDER 2006怎么配置 STRUTS?[
  8. 小程序 自定义组件报错[“usingComponents“][“my-list“] 未找到
  9. BZOJ2818-莫比乌斯反演/欧拉函数
  10. dw二级联动下拉菜单插件 宋君墨_Excel下拉菜单不会做?15秒教会你制作一二三级联动下拉菜单,从此做表不求人!...
  11. 在线文本纵向排版工具
  12. Ubuntu18.04之星际译王及辞典
  13. 较完整的angularjs+bootstrap应用程序接口controller
  14. web前端-HTML 媒体插件 022
  15. 浅谈~2016的一些亮点!
  16. 饥荒控制台输入没用_《饥荒》控制台秘籍使用方法
  17. opencv 应用程序无法正常启动0xc000007b
  18. MSE(L2损失)与MAE(L1损失)的分析
  19. 基于51单片机的电子密码锁设计
  20. 什么是*.yml文件

热门文章

  1. 数学分析 实数与函数(第1,7章)
  2. 微软商店的iTunes备份文件路径正确修改方法(2022.3.25)
  3. 福利 | 这些网站有免费代理IP!
  4. es6模板字符串里用html标签,为ES6模板字符串计算标签函数
  5. 10年老程序员:到底是学前端好还是后端好?
  6. 陆地生态系统生态学原理
  7. 智能家居-斐讯N1安装篇
  8. 简单分析2022智能家居现状的优缺点
  9. 2021-12-11 【数据结构平时实验】【图】
  10. android 系统默认字体大小,Android系统默认字体大小