长春网站制作费用,2022年近期重大新闻事件,html网页设计大作业,编程加盟一般多少钱这道题有两种解法#xff1a;动态规划 or 贪心算法。
贪心算法的提交结果要比动态规划好一些#xff0c;总体上动态规划的解法更容易想到。#xff08;完整题目附在了最后#xff09;
1、动态规划解法
设置两个数#xff0c;dp[0]表示遍历到股票prices[i]时手里没有股…这道题有两种解法动态规划 or 贪心算法。
贪心算法的提交结果要比动态规划好一些总体上动态规划的解法更容易想到。完整题目附在了最后
1、动态规划解法
设置两个数dp[0]表示遍历到股票prices[i]时手里没有股票情况下的纯利润要么就是无操作要么就是卖掉手里的股票卖掉股票是要减去fee两种操作之间选择利益最大的做法; dp[1]表示遍历到股票prices[i]时手里有股票情况下的纯利润在“无操作”和“购入当前股票”两种做法之间选择利益最大的做法那么遍历到股票prices[i1]时
dp [max(dp[0], dp[1] prices[i] - fee), max(dp[1], dp[0] - prices[i])]。
根据整体意思dp初始化时为 [0, -prices[0]]。 # 动态规划解法
class Solution(object):def maxProfit(self, prices, fee):n len(prices)dp [0, -prices[0]]for i in range(1, n):dp [max(dp[0], dp[1] prices[i] - fee), max(dp[1], dp[0] - prices[i])]return max(dp)
2、贪心解法
1在连续递减的情况下买入价格最低时的股票在不亏本的情况下如果连续递增则在最高点卖掉股票因为要多考虑一个fee的费用所以不亏本的前提要加上。
2代码有点弯弯绕在里面就是在还没买入的时候我们把手续费fee加到当前股票价格price上面遍历prices数组判断各个相邻pricefee后的大小在连续递减的情况下选择最低点的买入。
3买入之后就要寻找最高点卖出我们继续往后遍历找到卖出能够有利润的第一支股票设置一个“虚拟卖出”由于后面的股票价格可能更高所以这里不一定是当前这笔交易最后卖出的价格。如果后面的股票价格更高则把价格差加入到profit里面直到股票价格开始下降当前交易才算完成购入点为最低点卖出点为有利润的情况下的最高点。
4重复2与3中的买入卖出步骤直到遍历完prices数组。 # 贪心解法
class Solution:def maxProfit(self, prices, fee):n len(prices)profit 0budget prices[0] feefor i in range(1, n):if prices[i] fee budget:budget prices[i] feeelif prices[i] budget:profit prices[i] - budgetbudget prices[i]return profit
3、完整题目
714. 买卖股票的最佳时机含手续费
给定一个整数数组 prices其中 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
示例 2
输入prices [1,3,7,5,10,3], fee 3
输出6
提示
1 prices.length 5 * 10^41 prices[i] 5 * 10^40 fee 5 * 10^4