目录
买卖股票的最佳时机问题介绍:动态规划买卖股票的最佳时机是一个经典的算法问题。该问题的目标是在给定的股票价格数组中,找到最大的利润,即最佳的买入和卖出时间,使得买入时间早于卖出时间。
下面我们通过一些例题,来解决这一类动态规划的问题:
一.买卖股票的最佳时机:
- 题目链接:121. 买卖股票的最佳时机 - 力扣(leetcode)
- 题目描述:
给定一个数组
prices
,它的第i
个元素prices[i]
表示一支给定股票第i
天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回
0
。
①.动态规划解法:
②.暴力解法(相对简单这里给出解题过程):
代码详解:
class solution {
public int maxprofit(int[] prices) {
int cost = integer.max_value;
int profit = 0;
for(int price : prices){
cost = math.min(cost,price);
profit = math.max(profit,price - cost);
}
return profit;
}
}
运行结果:
二.买卖股票的最佳时机含冷冻期:
- 题目链接:309. 买卖股票的最佳时机含冷冻期 - 力扣(leetcode)
- 问题描述:
给定一个整数数组
prices
,其中第prices[i]
表示第i
天的股票价格 。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):
-
卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。
-
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
运行结果:
三.买卖股票的最佳时期含⼿续费:
题目链接:714. 买卖股票的最佳时机含手续费 - 力扣(leetcode)
题目描述:
给定一个整数数组 prices
,其中 prices[i]
表示第 i
天的股票价格 ;整数 fee
代表了交易股票的手续费用。
你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。
返回获得利润的最大值。
注意:这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。
运行结果:
四.买卖股票的最佳时机iii:
题目链接:123. 买卖股票的最佳时机 iii - 力扣(leetcode)
题目描述:
给定一个数组,它的第 i
个元素是一支给定的股票在第 i
天的价格。
设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
运行结果:
五.买卖股票的最佳时机iv:
题目链接:188. 买卖股票的最佳时机 iv - 力扣(leetcode)
题目描述:
给你一个整数数组 prices
和一个整数 k
,其中 prices[i]
是某支给定的股票在第 i
天的价格。
设计一个算法来计算你所能获取的最大利润。你最多可以完成 k
笔交易。也就是说,你最多可以买 k
次,卖 k
次。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
运行结果:
结语: 写博客不仅仅是为了分享学习经历,同时这也有利于我巩固知识点,总结该知识点,由于作者水平有限,对文章有任何问题的还请指出,接受大家的批评,让我改进。同时也希望读者们不吝啬你们的点赞+收藏+关注,你们的鼓励是我创作的最大动力!
发表评论