当前位置:网站首页>力扣:714. 买卖股票的最佳时机含手续费
力扣:714. 买卖股票的最佳时机含手续费
2022-07-31 14:46:00 【empty__barrel】
力扣:714. 买卖股票的最佳时机含手续费
题目:
给定一个整数数组 prices,其中 prices[i]表示第 i 天的股票价格 ;整数 fee 代表了交易股票的手续费用。
你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。返回获得利润的最大值。
注意:这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。
思路:
一:在遍历整个数组过程中我们包含如下操作:
开始一笔交易:
选定buy
有更小的buy,buy修改
有更大的sell,sell修改即合并区间
是否开始下一笔交易:
即不会产生合并区间的情况。通过方法①来实现
二:假设prices为:【1,4,3,8,4,9】
选择:【1,8】【4,9】
三:过程模拟
脑海中画出x,y坐标系,此时横坐标为值下标,纵坐标为值。
此时看题目可知,1,4可选,2,8可选。但是其选择了1,8。原因是什么呢?我们假设这个过程是怎样的来一步步反向推导出每一个问题的解决方案。因为一笔交易有手续费我们可以把手续费放到买入的钱里面去。我们遍历整个过程,遍历到1,我们选择买入,此时买入的是3,遍历到4按常理来说此时的4大于3所以我们选择卖出。遍历到8——此时我们进行反向推导。答案是【1,8】那么我们对3是不进行操作的,但是按常理来说我们应该入3,然后8的时候卖出啊。此时假如我们3买入,那么肯定有一个地方是卖出的我们设这个位置的值为x。此时我们分别计算一下3不买入和3买入所获得的利益。
①:
- 3买入:x-5+4-3 = x-4
- 3不买入:x-3
很明显3不买入比3买入利益更大,所以遍历到3的时候我们可以选择不买入。所以当我们遍历到一个值且已经有一个卖出的值后,我们可以通过①判断方法来看是否应该在这天买入。
同时当我们遍历到一个值且已经有一个卖出的值后,我们可以判断此值是否比卖出的那天价格更高,若更高则。prices+当前天的值-卖出那天的值即实现反悔的操作。如此便实现了整个过程。通过这两种方式的判断即可实现是合并操作,和重新产生一笔交易操作。
代码实现:
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 && prices[i] <= minPrice + fee) {
continue;
}
// 计算利润,可能有多次计算利润,最后一次计算利润才是真正意义的卖出
if (prices[i] > minPrice + fee) {
result += prices[i] - minPrice - fee;
minPrice = prices[i] - fee; // 情况一,这一步很关键
}
}
return result;
}
};
边栏推荐
猜你喜欢
Architecture actual combat battalion module 8 message queue table structure design
LeetCode二叉树系列——222.完全二叉树的节点个数
OpenShift 4 - Deploy Redis Cluster with Operator
海康摄像机取流RTSP地址规则说明
最近很火的国产接口神器Apipost体验
MySQL 23道经典面试吊打面试官
纸质说明书秒变3D动画,斯坦福大学吴佳俊最新研究,入选ECCV 2022
The JVM a class loader
Motion capture system for end-positioning control of flexible manipulators
STM32(十)------- SPI通信
随机推荐
OAuth2:单点登陆客户端
ML, DL, CV common problems sorting
How to clean up the lodash.memoize cache in the element-plus virtual table virtual-list component?
公告
Getting started with UnityShader (3) - Unity's Shader
MySQL [subquery]
Trigonometric identity transformation formula
Groupid(artifact id)
Sentinel限流和异常处理
OpenShift 4 - 定制 RHACS 安全策略,阻断生产集群使用高风险 Registry
jOOQ 3.14 released - SQL/XML and SQL/JSON support
OpenShift 4 - Deploy Redis Cluster with Operator
LeetCode二叉树系列——222.完全二叉树的节点个数
49. The copy constructor and overloaded 】
Shell project combat 1. System performance analysis
自适应控制——仿真实验二 用Narendra方案设计模型参考自适应系统
Spark学习(2)-Spark环境搭建-Local
"Listen to me, thank you" can be said in ancient poetry?Tsinghua University has developed an artifact of "Searching Sentences According to Meaning", which can search for the famous sayings you want wi
Getting started with UnityShader (1) - GPU and Shader
Sentinel安装与部署