Skip to content

Commit

Permalink
Merge pull request youngyangyang04#896 from RyouMon/master
Browse files Browse the repository at this point in the history
新增最佳买卖股票时机系列题目的GO解法
  • Loading branch information
youngyangyang04 authored Nov 16, 2021
2 parents 50b6948 + 279b0cf commit 1bbdc5c
Show file tree
Hide file tree
Showing 5 changed files with 132 additions and 3 deletions.
27 changes: 27 additions & 0 deletions problems/0122.买卖股票的最佳时机II(动态规划).md
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,33 @@ class Solution:
```

Go:
```go
// 买卖股票的最佳时机Ⅱ 动态规划
// 时间复杂度O(n) 空间复杂度O(n)
func maxProfit(prices []int) int {
dp := make([][]int, len(prices))
status := make([]int, len(prices) * 2)
for i := range dp {
dp[i] = status[:2]
status = status[2:]
}
dp[0][0] = -prices[0]

for i := 1; i < len(prices); i++ {
dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] - prices[i])
dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] + prices[i])
}

return dp[len(prices) - 1][1]
}

func max(a, b int) int {
if a > b {
return a
}
return b
}
```

```go
func maxProfit(prices []int) int {
Expand Down
31 changes: 31 additions & 0 deletions problems/0123.买卖股票的最佳时机III.md
Original file line number Diff line number Diff line change
Expand Up @@ -346,7 +346,38 @@ const maxProfit = prices => {
};
```

Go:

> 版本一:
```go
// 买卖股票的最佳时机III 动态规划
// 时间复杂度O(n) 空间复杂度O(n)
func maxProfit(prices []int) int {
dp := make([][]int, len(prices))
status := make([]int, len(prices) * 4)
for i := range dp {
dp[i] = status[:4]
status = status[4:]
}
dp[0][0], dp[0][2] = -prices[0], -prices[0]

for i := 1; i < len(prices); i++ {
dp[i][0] = max(dp[i - 1][0], -prices[i])
dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] + prices[i])
dp[i][2] = max(dp[i - 1][2], dp[i - 1][1] - prices[i])
dp[i][3] = max(dp[i - 1][3], dp[i - 1][2] + prices[i])
}

return dp[len(prices) - 1][3]
}

func max(a, b int) int {
if a > b {
return a
}
return b
}
```


-----------------------
Expand Down
35 changes: 35 additions & 0 deletions problems/0188.买卖股票的最佳时机IV.md
Original file line number Diff line number Diff line change
Expand Up @@ -272,6 +272,41 @@ class Solution:
return dp[2*k]
```
Go:
版本一:
```go
// 买卖股票的最佳时机IV 动态规划
// 时间复杂度O(kn) 空间复杂度O(kn)
func maxProfit(k int, prices []int) int {
if k == 0 || len(prices) == 0 {
return 0
}

dp := make([][]int, len(prices))
status := make([]int, (2 * k + 1) * len(prices))
for i := range dp {
dp[i] = status[:2 * k + 1]
status = status[2 * k + 1:]
}
for j := 1; j < 2 * k; j += 2 {
dp[0][j] = -prices[0]
}

for i := 1; i < len(prices); i++ {
for j := 0; j < 2 * k; j += 2 {
dp[i][j + 1] = max(dp[i - 1][j + 1], dp[i - 1][j] - prices[i])
dp[i][j + 2] = max(dp[i - 1][j + 2], dp[i - 1][j + 1] + prices[i])
}
}
return dp[len(prices) - 1][2 * k]
}

func max(a, b int) int {
if a > b {
return a
}
return b
}
```

```go
func maxProfit(k int, prices []int) int {
Expand Down
34 changes: 34 additions & 0 deletions problems/0309.最佳买卖股票时机含冷冻期.md
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,40 @@ class Solution:
```

Go:
```go
// 最佳买卖股票时机含冷冻期 动态规划
// 时间复杂度O(n) 空间复杂度O(n)
func maxProfit(prices []int) int {
n := len(prices)
if n < 2 {
return 0
}

dp := make([][]int, n)
status := make([]int, n * 4)
for i := range dp {
dp[i] = status[:4]
status = status[4:]
}
dp[0][0] = -prices[0]

for i := 1; i < n; i++ {
dp[i][0] = max(dp[i - 1][0], max(dp[i - 1][1] - prices[i], dp[i - 1][3] - prices[i]))
dp[i][1] = max(dp[i - 1][1], dp[i - 1][3])
dp[i][2] = dp[i - 1][0] + prices[i]
dp[i][3] = dp[i - 1][2]
}

return max(dp[n - 1][1], max(dp[n - 1][2], dp[n - 1][3]))
}

func max(a, b int) int {
if a > b {
return a
}
return b
}
```

Javascript:

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -149,14 +149,16 @@ class Solution:
```

Go:
```Go
```go
// 买卖股票的最佳时机含手续费 动态规划
// 时间复杂度O(n) 空间复杂度O(n)
func maxProfit(prices []int, fee int) int {
n := len(prices)
dp := make([][2]int, n)
dp[0][0] = -prices[0]
for i := 1; i < n; i++ {
dp[i][1] = max(dp[i-1][1], dp[i-1][0]+prices[i]-fee)
dp[i][0] = max(dp[i-1][0], dp[i-1][1]-prices[i])
dp[i][1] = max(dp[i-1][1], dp[i-1][0] + prices[i] - fee)
dp[i][0] = max(dp[i-1][0], dp[i-1][1] - prices[i])
}
return dp[n-1][1]
}
Expand Down

0 comments on commit 1bbdc5c

Please sign in to comment.