leetcode 714 买卖股票的最佳时机含手续费-动态规划(中等)
714 买卖股票的最佳时机含手续费-动态规划(中等)
给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 ;非负整数 fee 代表了交易股票的手续费用。
你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。
注意:这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。
输入: 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.
每天的动作总共有三种:买、卖、不动,而每一天的最大利润都可以由前一天的最大利润转移而来,综上不难得出:
注意一开始dp的初始化。每次对dp数组进行初始化的要点就是根据“定义”去解释一开始的边界的含义。对于本题,$dp[0][0]=0,dp[0][1]=-price[0] $。
class Solution {
public:int maxProfit(vector<int>& prices, int fee) {int n = prices.size();int d[n][2];d[0][0]=0;d[0][1]=-(prices[0]);for(int i =1;i<n;i++){d[i][0] = max( d[i-1][0], (d[i-1][1]+prices[i]-fee));d[i][1] = max( d[i-1][1], (d[i-1][0]-prices[i]));}return d[n-1][0];}
};
由于第i天的状态只与第i-1天的状态有关,因此可以将d数组进行空间上的压缩,压缩为1维。d[0]\d[1]。
import numpy as np
class Solution:def maxProfit(self, prices: List[int], fee: int) -> int:n = len(prices)buy = -prices[0]sell = 0 for i in range(1,n):new_buy = max(buy , sell-prices[i])new_sell = max(sell, buy+prices[i]-fee)buy = new_buysell = new_sellreturn sell
把手续费转移到买入时支付(只要是在一次买卖当中支付手续费即可),我们就可以通过“尽可能最小化买入成本,最大化卖出价格”的贪心策略求得最大利润了。
设buy为在最大收益前提下,如果我们手上拥有一支股票,那么它的最低买入成本是多少。
- 情况一:price[i]>buyprice[i]>buyprice[i]>buy:此时可以卖出并计算利润,利润为price[i]−buyprice[i]-buyprice[i]−buy。然而由于此时并不是收获利润区间里的最后一天(不是真正的卖出,相当于持有股票),所以后面要继续收获利润。此时需要将buy置为price[i]price[i]price[i]。相当于再卖出获得利润的同时又立即以相同的价格且不加手续费的获得了一只股票。当后续价格仍增长时,price[i+1]−price[i]+(price[i]−buy)=price[i+1]−buyprice[i+1]-price[i]+(price[i]-buy)=price[i+1]-buyprice[i+1]−price[i]+(price[i]−buy)=price[i+1]−buy.
- 情况二:price[i]+fee<buyprice[i]+fee < buyprice[i]+fee<buy:此时买入价格更低,应重新记录买入价格。(前一天是收获利润区间里的最后一天(相当于真正的卖出了),今天要重新记录最小价格了。)
- 情况三:KaTeX parse error: Expected '}', got '&' at position 32: …uy \text{ &̲& } buy>=…不作操作,保持原有状态(买入,卖出,不买不卖)
class Solution {
public:int maxProfit(vector<int>& prices, int fee) {int n = prices.size();int buy = prices[0]+fee;int res = 0;for(int i=1;i<n;i++){if(prices[i]+fee < buy){buy = prices[i]+fee;}if(prices[i] > buy){res += prices[i]-buy;buy = prices[i];}}return res;}
};
import numpy as np
class Solution:def maxProfit(self, prices: List[int], fee: int) -> int:n = len(prices)buy = prices[0]res = 0for i in range(1,n):if(prices[i]<buy):buy = prices[i]if(prices[i]-fee > buy):res += prices[i]-fee-buybuy = prices[i]-feereturn res
leetcode 714 买卖股票的最佳时机含手续费-动态规划(中等)相关推荐
- 110. Leetcode 714. 买卖股票的最佳时机含手续费 (动态规划-股票交易)
步骤一.确定状态: 确定dp数组及下标含义 dp[i]是一个长度为len(prices)的一维数组,表示的是在第i天持有股票 步骤二.推断状态方程: 第i天不持有股票,即dp[i][0], 那么两个状 ...
- 【算法】贪心算法:LeetCode 714 买卖股票的最佳时机含手续费 、LeetCode 968 监控二叉树
LeetCode 714 买卖股票的最佳时机含手续费 (中等) 题目 描述 给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 :整数 fee 代表了交易股票的手续费用. 你 ...
- 【贪心算法】Leetcode 714. 买卖股票的最佳时机含手续费
[贪心算法]Leetcode 714. 买卖股票的最佳时机含手续费 题目 给定一个整数数组 prices,其中 prices[i]表示第 i 天的股票价格 :整数 fee 代表了交易股票的手续费用. ...
- LeetCode 714 买卖股票的最佳时机含手续费
714. 买卖股票的最佳时机含手续费 题目 思路 过一遍,记录第i天是否买入和卖出的最值. 代码 class Solution {public:int maxProfit(vector<int& ...
- LeetCode·714.买卖股票的最佳时机含手续费·贪心
作者:xun-ge-v 链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/sol ...
- leetcode 714. 买卖股票的最佳时机含手续费(dp)
给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 :非负整数 fee 代表了交易股票的手续费用. 你可以无限次地完成交易,但是你每笔交易都需要付手续费.如果你已经购买了一个 ...
- leetcode 714. 买卖股票的最佳时机含手续费(java)
贪心!!! class Solution {public int maxProfit(int[] prices, int fee) {int n = prices.length;int buy = p ...
- 模拟卷Leetcode【普通】714. 买卖股票的最佳时机含手续费
714. 买卖股票的最佳时机含手续费 给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 :整数 fee 代表了交易股票的手续费用. 你可以无限次地完成交易,但是你每笔交易都 ...
- Leetcode刷题笔记 714. 买卖股票的最佳时机含手续费
714. 买卖股票的最佳时机含手续费 时间:2020年12月17日 知识点:动态规划 题目链接:https://leetcode-cn.com/problems/best-time-to-buy-an ...
最新文章
- jenkins同平台发布
- linux find 删除文件夹,linux中find与rm实现查找并删除目录或文件linux操作系统 -电脑资料...
- 如何解决 SQL Server 2000 中的连接问题
- IBM was调试端口开通演示,was服务重启、端口号查看方法
- Markdown设置字体大小、颜色...,CSDN博客编写设置字体大小、颜色、粗细。字体,文字背景设置。
- C++中接口与实现分离的技术
- Oracle 存储过程,函数和包。
- C#字节数组与值类型变量的互相转换,以及注意事项
- 设计模式到底离我们有多远
- 如何保证用户登陆时提交密码已经加密
- 面试题(用栈代替队列的操作和原生map实现)
- 碳酸铜行业调研报告 - 市场现状分析与发展前景预测
- 输出四位完全平方数_leetcode279_go_完全平方数
- go基础_defer
- Kubernetes 系统强化 Pod安全策略 PSP
- 分享一个微信公众号管理平台源码
- RPG游戏地图素材 2D像素风瓦片地图包 角色扮演独立游戏制作美术资源
- Android 使用VelocityTracker来获取滑动速度
- office365彻底卸载教程
- MacOS制作ubuntu18.04系统U盘启动盘
热门文章
- uniapp引用外部js_Uniapp怎么引入外部js
- c++ 箭头符号怎么打_c++笔记--重载箭头运算符
- 服务器电脑通电自动开机
- 使用NtCreateThreadEx将Dll注入目标进程
- 删除计算机自带的游戏软件,win10系统删除自带游戏的处理办法
- 2021湖南耒阳二中高考成绩查询,来自耒阳各校的高考喜报
- 智搜荣获用友·华为云杯开发者大赛“优秀商业应用奖”
- 【苹果推软件】Apple IOS推送证书 如何创建CSR文件
- MySQL——插入语句
- 利用CSS在图片中添加文字