@@ -325,6 +325,66 @@ const maxProfit = (prices) => {
325325};
326326```
327327
328+ TypeScript:
329+
330+ > 版本一,与本文思路一致
331+
332+ ```typescript
333+ function maxProfit (prices: number[ ] ): number {
334+ /**
335+ dp[ i] [ 0 ] : 持股状态;
336+ dp[ i] [ 1 ] : 无股状态,当天为非冷冻期;
337+ dp[ i] [ 2 ] : 无股状态,当天卖出;
338+ dp[ i] [ 3 ] : 无股状态,当天为冷冻期;
339+ * /
340+ const length: number = prices.length;
341+ const dp: number[ ] [ ] = new Array(length).fill(0).map(_ => [ ] );
342+ dp[ 0] [ 0 ] = -prices[ 0] ;
343+ dp[ 0] [ 1 ] = dp[ 0] [ 2 ] = dp[ 0] [ 3 ] = 0;
344+ for (let i = 1; i < length; i++) {
345+ dp[ i] [ 0 ] = Math.max(
346+ dp[ i - 1] [ 0 ] ,
347+ Math.max(dp[ i - 1] [ 1 ] , dp[ i - 1] [ 3 ] ) - prices[ i]
348+ );
349+ dp[ i] [ 1 ] = Math.max(dp[ i - 1] [ 1 ] , dp[ i - 1] [ 3 ] );
350+ dp[ i] [ 2 ] = dp[ i - 1] [ 0 ] + prices[ i] ;
351+ dp[ i] [ 3 ] = dp[ i - 1] [ 2 ] ;
352+ }
353+ const lastEl: number[ ] = dp[ length - 1] ;
354+ return Math.max(lastEl[ 1] , lastEl[ 2] , lastEl[ 3] );
355+ };
356+ ```
357+
358+ > 版本二,状态定义略有不同,可以帮助理解
359+
360+ ```typescript
361+ function maxProfit(prices: number[]): number {
362+ /**
363+ dp[i][0]: 持股状态,当天买入;
364+ dp[i][1]: 持股状态,当天未买入;
365+ dp[i][2]: 无股状态,当天卖出;
366+ dp[i][3]: 无股状态,当天未卖出;
367+
368+ 买入有冷冻期限制,其实就是状态[0]只能由前一天的状态[3]得到;
369+ 如果卖出有冷冻期限制,其实就是[2]由[1]得到。
370+ */
371+ const length: number = prices.length;
372+ const dp: number[][] = new Array(length).fill(0).map(_ => []);
373+ dp[0][0] = -prices[0];
374+ dp[0][1] = -Infinity;
375+ dp[0][2] = dp[0][3] = 0;
376+ for (let i = 1; i < length; i++) {
377+ dp[i][0] = dp[i - 1][3] - prices[i];
378+ dp[i][1] = Math.max(dp[i - 1][1], dp[i - 1][0]);
379+ dp[i][2] = Math.max(dp[i - 1][0], dp[i - 1][1]) + prices[i];
380+ dp[i][3] = Math.max(dp[i - 1][3], dp[i - 1][2]);
381+ }
382+ return Math.max(dp[length - 1][2], dp[length - 1][3]);
383+ };
384+ ```
385+
386+
387+
328388
329389-----------------------
330390<div align =" center " ><img src =https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width =500 > </img ></div >
0 commit comments