一、题目
二、代码
class Solution
{
public int maxProfit(int[] prices)
{
int i;
int sum = 0;
int length = prices.length;
if(length == 1 ) return 0;
int[][] dp = new int[length][2];
//0 表示持有
//1 表示不持有
dp[0][0] = -1 *prices[0];
dp[0][1] = 0;
for(i=1;i<length;i++)
{
dp[i][0] = Math.max(dp[i-1][0], - prices[i] );
dp[i][1] = Math.max(dp[i-1][1],dp[i-1][0] + prices[i]);
// System.out.println(" [0] "+dp[i][0] + " [1] " +dp[i][1]);
}
return dp[length-1][1];
}
}
三、运行结果
四、附录
二刷
class Solution
{
public int maxProfit(int[] prices)
{
int i;
int length = prices.length;
int[] min = new int[length];
int[] max = new int[length];
min[0] = prices[0];
max[length-1] = prices[length-1];
for(i=1;i<length;i++)
{
if(prices[i]<min[i-1]) min[i] = prices[i];
else min[i] = min[i-1];
}
for(i=length-2;i>=0;i--)
{
if(prices[i]>max[i+1]) max[i] = prices[i];
else max[i] = max[i+1];
}
// for(i=0;i<length;i++) System.out.print(" "+min[i]);
// System.out.println(" ");
// for(i=0;i<length;i++) System.out.print(" "+max[i]);
int res = 0;
for(i=0;i<length;i++) res= Math.max(res,max[i]-min[i]);
return res;
}
}