leetcode——第714题——可以买卖多次股票(每次有手续费)
题意:
给定一个整数数组 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题——可以买卖多次股票(每次有手续费)相关推荐
- [剑指offer]面试题第[63]题[Leetcode][第121题][JAVA][买卖股票的最佳时机][动态规划][暴力]
[问题描述][简单] [解答思路] 1. 暴力 时间复杂度:O(N^2) 空间复杂度:O(1) public class Solution {public int maxProfit(int pric ...
- leetcode每日一题·买卖股票问题(Python)
leetcode每日一题·买卖股票问题(Python) 买卖股票的最佳时机(股票最大利润) 题目链接 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的 ...
- 力扣leetcode之Java刷题121买卖股票的最佳时机
121. 买卖股票的最佳时机 题目: 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格. 你只能选择某一天买入这只股票,并选择在未来的某一 ...
- LeetCode动态规划基础题-总结(超级长文)
前言 五一留校,要不学习一下,整理了一下之前学习的动态的笔记~- -_--- 这部分的题目 确实很有质量的呀,认真看完,会有收获的啦. 感谢代码随想录.LeetCode 真是非常好的练习平台和习题讲解 ...
- leetcode贪心算法题集锦(持续更新中)
leetcode贪心算法题集锦 leetcode贪心算法题集锦(持续更新中).python 和C++编写. 文章目录 leetcode贪心算法题集锦 一.贪心算法 1.盛最多水的容器 2.买股票的最佳 ...
- leetcode python3 简单题122. Best Time to Buy and Sell Stock II
1.编辑器 我使用的是win10+vscode+leetcode+python3 环境配置参见我的博客: 链接 2.第一百二十二题 (1)题目 英文: Say you have an array pr ...
- LeetCode部分刷题笔记!!!JavaScript!!!
详细解说请看视频JS老毕:人人都能看得懂的Leetcode力扣刷题教程合集 边看视频边记录笔记!!!部分题目在视频中无! 文章目录 LeetCode第1题:1. 两数之和 LeetCode第2题:2. ...
- PythonJava版【LeetCode】简单题答案整理01
不得不开始刷LeetCode了,为了使小白的自尊心不受到毁灭性的打击,所以打算从最简单的题开始刷.现把所有题目的Python和Java代码都放在这儿,以便随时回忆.分两种语言的原因在于,Python是 ...
- 刷题汇总(一)leetcode 精选50题 JavaScript答案总结
题目来源 腾讯精选练习(50 题) 信息更新时间:2019-3-11,因为要准备面前端,就用js做了遍来熟悉JavaScript这门语言,50道题均已提交通过. GitHub地址:https://gi ...
- 刷题汇总(三)leetcode 精选50题 C++答案总结
题目来源 腾讯精选练习(50 题) 相关: 刷题汇总(一)leetcode 精选50题 JavaScript答案总结 刷题汇总(二)剑指Offer 66题 C++答案总结 刷题汇总(四)技术类编程题汇 ...
最新文章
- linux u盘 挂载 type,Linux挂载U盘报错:mount: unknown filesystem type 'ntfs'
- 2020 北京智源大会首日精华速递
- [LeetCode] Search Insert Position 搜索插入位置
- 【Spring】详解spring事务属性
- java http服务端例子_简单的用 Java Socket 编写的 HTTP 服务器应用
- 可以添加自定义的Select控件
- 制作完整的java可执行文件
- mupdf java_mupdf库学习
- 图像分割(二):高斯混合模型(GMM)方法
- 当零售行业遇上小程序,该如何玩转全新商业模式
- 高通SDX12:sar sensor AW9610x驱动移植
- webstorm配置vue模板 webstorm快速生成vue模板
- HNU大一小学期作业三 棋盘
- iota 的 优点与吐槽
- 生物信息学|药物发现中的机器学习技术(2)
- linux 微信不能发图片,微信回应发原图泄露位置信息​;元旦起 AI 造假音视频不得随意发布...
- TF-IDF的原理概述
- 客户端监控要怎么做?
- SaaS从业者宝典:一文读懂如何衡量与优化SaaS公司的关键指标
- Java实现简单的倒排索引
热门文章
- neo4j学习总结--第三课 Cypher(CQL)命令一
- 海康摄像头4G内网连接方案
- 如何写一份高可读性的软件工程设计文档
- 电源管理芯片之 Regulator用法 Regulator framework
- vant 动态 粘性布局_使用 position:sticky 实现粘性布局
- 用html制作空心菱形的代码,javascript打印完整金字塔型_完整菱形_空心菱形_思路算法详解_js源代码...
- 计算机导论论文对课程的思考,计算机导论课浅析论文
- 统计学中cv表示什么_cv是什么意思
- 多拨软件测试,虚拟机下多拨与OP下多拨测试
- 2019很艰难,2020会更好吗