股票买卖打卡
- 买卖股票的最佳时机
给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。
- 买卖股票的最佳时机 II
给定一个数组 prices ,其中 prices[i] 是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
- 最佳买卖股票时机含冷冻期
给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):
你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。 - 买卖股票的最佳时机含手续费
给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 ;整数 fee 代表了交易股票的手续费用。你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。返回获得利润的最大值。注意:这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。
买卖股票的最佳时机
思路
给你一个股票的大盘图,如上图,请你来进行操盘,如果让你的得到最大的利润,股神给你的提示:你可以选择一天进行买入,若干天进行卖出
,那么求最大利润必然是将手中的股票抛售出去,所有基础状态就有2种,就是在你手中持有股票卖出和你手里持有股票未卖出也就是(套牢)。当新一天开始的时候,如果你想获取最大的利润,那么要计算下当前的利润和卖出套牢的股票获取的利润的最大值,还需要计算下当前套牢的最大值,等于当前不买股票的套牢的支出和再买一次股票的支出的最大值。也就是说要想每天获利最大就判断当前的利润和把套牢的股票按照当天股价出售的最大值
代码
func maxProfit(prices []int) int {
a,b:=0,math.MinInt32
for i:=0;i<len(prices);i++{
a=max(a,b+prices[i])
b=max(b,-prices[i])
}
return a
}
func max(a,b int)int{
if a>b {
return a
}
return b
}
买卖股票的最佳时机 II
思路
还是上述那个股票大盘,获取股票收益最大的思路还和第一题类似。不过本次股神给的规则是新购股票之前你必须卖出之前的股票
,所以我们在计算当前持有的最大值股票收益时需要获取当前交易之前的利润减去当天的股价和原来持有股票收益的做比较。
代码
func maxProfit(prices []int) int {
a,b:=0,math.MinInt32
for i:=0;i<len(prices);i++{
t:=a
a=max(a,b+prices[i])
b=max(b,t-prices[i])
}
return a
}
func max(a,b int)int{
if a>b {
return a
}
return b
}
最佳买卖股票时机含冷冻期
思路
还是上述那个股票大盘,获取股票收益最大的思路还和第一题类似。这一次股神给的规则是新购股票之前你必须卖出之前的股票
,还增加了冷冻期(窗口期)
,在窗口期是无法进行股票买卖的。而且在新购股票的同时必然是冷冻期的利润来支付当天购买股票的股价。那么基础条件就需要修正一下,要增加在冷冻期的利润,同时要想获取本次大盘股票的最大利润,需要比较冷冻期和卖出股票的最大值来得到了。草图如下
代码
func maxProfit(prices []int) int {
a,s,l:=math.MinInt32,0,0
for i:=0;i<len(prices);i++{
ta,tb,tc:=a,s,l
a=max(ta,tc-prices[i])
s=ta+prices[i]
l=max(tb,tc)
}
return max(s,l)
}
func max(a,b int)int{
if a>b {
return a
}
return b
}
买卖股票的最佳时机含手续费
思路
还是上述那个股票大盘,获取股票收益最大的思路还和第一题类似。这一次股神给的规则是增加了交易手续费
,要成为一名合格的操盘手,低买高卖那是不可能实现地,我也就打打短期,交易的手续费你得算好了,不然老婆本不得亏死,言归正传。这题和第一题不能说一毛一样吧也可以说是复刻了,由于手续费的存在,导致了你每次卖出都需要去支付一部分手续费,本次交易的最大值就得在持有股票和卖出股票的收益在比较了。
代码
func maxProfit(prices []int) int {
a,b:=math.MinInt32,0
for i:=0;i<len(prices);i++{
t:=b
b=max(b,a+prices[i]-fee)
a=max(a,t-prices[i])
}
return max(a,b)
}
func max(a,b int)int{
if a>b {
return a
}
return b
}
最后的最后 我懒得总结了。加油铁子