跳到主要内容

122.买卖股票的最佳时机II

链接:122.买卖股票的最佳时机II
难度:Medium
标签:贪心、数组、动态规划
简介:给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。

题解 1 - typescript

  • 编辑时间:2020-11-08
  • 执行用时:84ms
  • 内存消耗:40.2MB
  • 编程语言:typescript
  • 解法介绍:动态规划。
function maxProfit(prices: number[]): number {
const len = prices.length;
let dp0 = 0,
dp1 = -prices[0];
for (let i = 1; i < len; i++) {
dp0 = Math.max(dp0, dp1 + prices[i]);
dp1 = Math.max(dp1, dp0 - prices[i]);
}
return dp0;
}

题解 2 - typescript

  • 编辑时间:2021-09-04
  • 执行用时:84ms
  • 内存消耗:41.2MB
  • 编程语言:typescript
  • 解法介绍:前缀和,减去前面前缀和的最小值。
function maxProfit(prices: number[]): number {
const n = prices.length;
/**
* 0 : 买
* 1 : 卖
*/
const dp = new Array(n).fill(0).map(_ => new Array(2).fill(0));
dp[0][0] = -prices[0];
for (let i = 1; i < n; i++) {
dp[i][0] = Math.max(dp[i - 1][0], dp[i - 1][1] - prices[i]);
dp[i][1] = Math.max(dp[i - 1][0] + prices[i], dp[i - 1][1]);
}
return dp[n - 1][1];
}

题解 3 - typescript

  • 编辑时间:2021-09-04
  • 执行用时:76ms
  • 内存消耗:40.1MB
  • 编程语言:typescript
  • 解法介绍:统计每个上升区间。
function maxProfit(prices: number[]): number {
let ans = 0;
for (let i = 1; i < prices.length; i++)
if (prices[i] > prices[i - 1]) ans += prices[i] - prices[i - 1];
return ans;
}