题意:
给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 ;非负整数 fee 代表了交易股票的手续费用。

你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。

返回获得利润的最大值。

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

// /*
// 这题贪心有点难想的到,就怎么处理计算利润,已经如何更新 minPrice很饶。
// 贪心思想:最低值买,最高值(最高值需要减去买入值和手续费)就卖
// */
// // 时间复杂度 O(n)    空间复杂度 O(1)
// class Solution {
// public:
//     int maxProfit(vector<int>& prices, int fee)
//     {
//         int result = 0;
//         int minPrice = prices[0];
//         for(int i = 1; i < prices.size(); i++)
//         {
//             // 情况二: 相当于买入
//             if(prices[i] < minPrice)
//             {
//                 minPrice = prices[i];
//             }
//             // 计算利润,这里有可能计算多次,但最后一次计算利润才是真正意义的卖出
//             if(prices[i] > minPrice + fee)
//             {
//                 result += prices[i] - minPrice - fee;
//                 minPrice = prices[i] - fee;     // 情况一:
//                 // 这里不知道为什么????
//                 // 啊!~好像知道了,这样确实是把 minPrice 改变了,但是也只有第 i 天之后出现的股票价格 大于 prices[i] - fee,才有可能被用上,否则,第i天就需要卖股票咯~而且这样不会导致在第 i 天后出现更高的股票价格后,result多见一个 fee
//             }//             // 其实情况三:就可以理解为 else 的情况。不做操作就相当于 进入下一轮循环
//         }
//         return result;
//     }
// };// /************************法二: 动态规划**************************/
/* 时间复杂度 O(n)    空间复杂度 O(n)
本题中 与多次买卖股票非常类似,只需要在计算卖出操作时,减去手续费即可。*/
// class Solution {
// public:
//     int maxProfit(vector<int>& prices, int fee)
//     {
//         // dp[i][0] 第 i 天持有股票所剩的最多现金
//         // dp[i][1] 第 i 天不持有股票所剩的最多现金
//         int n = prices.size();
//         vector<vector<int>> dp(n,vector<int>(2,0));
//         dp[0][0] = dp[0][0] - prices[0];    // 持股票
//         for(int i = 1; i < n; i++)
//         {
//             dp[i][0] = max(dp[i - 1][0],dp[i - 1][1] - prices[i]);
//             dp[i][1] = max(dp[i - 1][1],dp[i - 1][0] + prices[i] - fee);
//         }
//         return max(dp[n - 1][0], dp[n - 1][1]);
//     }
// };/************************法三: 优化了空间的动态规划**************************/
// 时间复杂度 O(n)    空间复杂度 O(1)
// 相当于使用了滚动数组的形式
class Solution {
public:int maxProfit(vector<int>& prices, int fee) {int n = prices.size();int holdStock = (-1) * prices[0];   // 持股票int saleStock = 0;      // 卖出股票for(int i = 1; i < n; i++){int previousHoldStock = holdStock;holdStock = max(holdStock, saleStock - prices[i]);saleStock = max(saleStock, previousHoldStock + prices[i] - fee);}return saleStock;}
};

leetcode——第714题——可以买卖多次股票(每次有手续费)相关推荐

  1. [剑指offer]面试题第[63]题[Leetcode][第121题][JAVA][买卖股票的最佳时机][动态规划][暴力]

    [问题描述][简单] [解答思路] 1. 暴力 时间复杂度:O(N^2) 空间复杂度:O(1) public class Solution {public int maxProfit(int pric ...

  2. leetcode每日一题·买卖股票问题(Python)

    leetcode每日一题·买卖股票问题(Python) 买卖股票的最佳时机(股票最大利润) 题目链接 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的 ...

  3. 力扣leetcode之Java刷题121买卖股票的最佳时机

    121. 买卖股票的最佳时机 题目:   给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格.   你只能选择某一天买入这只股票,并选择在未来的某一 ...

  4. LeetCode动态规划基础题-总结(超级长文)

    前言 五一留校,要不学习一下,整理了一下之前学习的动态的笔记~- -_--- 这部分的题目 确实很有质量的呀,认真看完,会有收获的啦. 感谢代码随想录.LeetCode 真是非常好的练习平台和习题讲解 ...

  5. leetcode贪心算法题集锦(持续更新中)

    leetcode贪心算法题集锦 leetcode贪心算法题集锦(持续更新中).python 和C++编写. 文章目录 leetcode贪心算法题集锦 一.贪心算法 1.盛最多水的容器 2.买股票的最佳 ...

  6. leetcode python3 简单题122. Best Time to Buy and Sell Stock II

    1.编辑器 我使用的是win10+vscode+leetcode+python3 环境配置参见我的博客: 链接 2.第一百二十二题 (1)题目 英文: Say you have an array pr ...

  7. LeetCode部分刷题笔记!!!JavaScript!!!

    详细解说请看视频JS老毕:人人都能看得懂的Leetcode力扣刷题教程合集 边看视频边记录笔记!!!部分题目在视频中无! 文章目录 LeetCode第1题:1. 两数之和 LeetCode第2题:2. ...

  8. PythonJava版【LeetCode】简单题答案整理01

    不得不开始刷LeetCode了,为了使小白的自尊心不受到毁灭性的打击,所以打算从最简单的题开始刷.现把所有题目的Python和Java代码都放在这儿,以便随时回忆.分两种语言的原因在于,Python是 ...

  9. 刷题汇总(一)leetcode 精选50题 JavaScript答案总结

    题目来源 腾讯精选练习(50 题) 信息更新时间:2019-3-11,因为要准备面前端,就用js做了遍来熟悉JavaScript这门语言,50道题均已提交通过. GitHub地址:https://gi ...

  10. 刷题汇总(三)leetcode 精选50题 C++答案总结

    题目来源 腾讯精选练习(50 题) 相关: 刷题汇总(一)leetcode 精选50题 JavaScript答案总结 刷题汇总(二)剑指Offer 66题 C++答案总结 刷题汇总(四)技术类编程题汇 ...

最新文章

  1. linux u盘 挂载 type,Linux挂载U盘报错:mount: unknown filesystem type 'ntfs'
  2. 2020 北京智源大会首日精华速递
  3. [LeetCode] Search Insert Position 搜索插入位置
  4. 【Spring】详解spring事务属性
  5. java http服务端例子_简单的用 Java Socket 编写的 HTTP 服务器应用
  6. 可以添加自定义的Select控件
  7. 制作完整的java可执行文件
  8. mupdf java_mupdf库学习
  9. 图像分割(二):高斯混合模型(GMM)方法
  10. 当零售行业遇上小程序,该如何玩转全新商业模式
  11. 高通SDX12:sar sensor AW9610x驱动移植
  12. webstorm配置vue模板 webstorm快速生成vue模板
  13. HNU大一小学期作业三 棋盘
  14. iota 的 优点与吐槽
  15. 生物信息学|药物发现中的机器学习技术(2)
  16. linux 微信不能发图片,微信回应发原图泄露位置信息​;元旦起 AI 造假音视频不得随意发布...
  17. TF-IDF的原理概述
  18. 客户端监控要怎么做?
  19. SaaS从业者宝典:一文读懂如何衡量与优化SaaS公司的关键指标
  20. Java实现简单的倒排索引

热门文章

  1. neo4j学习总结--第三课 Cypher(CQL)命令一
  2. 海康摄像头4G内网连接方案
  3. 如何写一份高可读性的软件工程设计文档
  4. 电源管理芯片之 Regulator用法 Regulator framework
  5. vant 动态 粘性布局_使用 position:sticky 实现粘性布局
  6. 用html制作空心菱形的代码,javascript打印完整金字塔型_完整菱形_空心菱形_思路算法详解_js源代码...
  7. 计算机导论论文对课程的思考,计算机导论课浅析论文
  8. 统计学中cv表示什么_cv是什么意思
  9. 多拨软件测试,虚拟机下多拨与OP下多拨测试
  10. 2019很艰难,2020会更好吗