《漫画算法2》源码整理-9 股票交易最大收益
Posted GarfieldEr007
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《漫画算法2》源码整理-9 股票交易最大收益相关的知识,希望对你有一定的参考价值。
股票交易最大收益
public class StockProfit
public static int maxProfitFor1Time(int prices[])
if(prices==null || prices.length==0)
return 0;
int minPrice = prices[0];
int maxProfit = 0;
for (int i = 1; i < prices.length; i++)
int profit = prices[i] - minPrice;
if(profit > maxProfit)
maxProfit = profit;
else if (prices[i] < minPrice)
minPrice = prices[i];
return maxProfit;
public static int maxProfitForAnyTime(int[] prices)
int maxProfit = 0;
for (int i = 1; i < prices.length; i++)
if (prices[i] > prices[i-1])
maxProfit += prices[i] - prices[i-1];
return maxProfit;
//最大买卖次数
private static int MAX_DEAL_TIMES = 2;
public static int maxProfitFor2Time(int[] prices)
if(prices==null || prices.length==0)
return 0;
//表格的最大行数
int n = prices.length;
//表格的最大列数
int m = MAX_DEAL_TIMES*2+1;
//使用二维数组记录数据
int[][] resultTable = new int[n][m];
//填充初始状态
resultTable[0][1] = -prices[0];
resultTable[0][3] = -prices[0];
//自底向上,填充数据
for(int i=1;i<n;++i)
for(int j=1;j<m;j++)
if((j&1) == 1)
//j为奇数的情况
resultTable[i][j] = Math.max(resultTable[i-1][j], resultTable[i-1][j-1]-prices[i]);
else
//j为偶数的情况
resultTable[i][j] = Math.max(resultTable[i-1][j], resultTable[i-1][j-1]+prices[i]);
//返回最终结果
return resultTable[n-1][m-1];
public static int maxProfitFor2TimeV2(int[] prices)
if(prices==null || prices.length==0)
return 0;
//表格的最大行数
int n = prices.length;
//表格的最大列数
int m = MAX_DEAL_TIMES*2+1;
//使用一维数组记录数据
int[] resultTable = new int[m];
//填充初始状态
resultTable[1] = -prices[0];
resultTable[3] = -prices[0];
//自底向上,填充数据
for(int i=1;i<n;i++)
for(int j=1;j<m;j++)
if((j&1) == 1)
//j为奇数的情况
resultTable[j] = Math.max(resultTable[j], resultTable[j-1]-prices[i]);
else
//j为偶数的情况
resultTable[j] = Math.max(resultTable[j], resultTable[j-1]+prices[i]);
//返回最终结果
return resultTable[m-1];
public static int maxProfitForKTime(int[] prices, int k)
if(prices==null || prices.length==0 || k<=0)
return 0;
//表格的最大行数
int n = prices.length;
//表格的最大列数
int m = k*2+1;
//使用一维数组记录数据
int[] resultTable = new int[m];
//填充初始状态
for(int i=1;i<m;i+=2)
resultTable[i] = -prices[0];
//自底向上,填充数据
for(int i=1;i<n;i++)
for(int j=1;j<m;j++)
if((j&1) == 1)
//j为奇数的情况
resultTable[j] = Math.max(resultTable[j], resultTable[j-1]-prices[i]);
else
//j为偶数的情况
resultTable[j] = Math.max(resultTable[j], resultTable[j-1]+prices[i]);
//返回最终结果
return resultTable[m-1];
public static void main(String[] args)
int[] prices = 9,2,7,4,3,1,8,4;
System.out.println(maxProfitFor1Time(prices));
System.out.println(maxProfitForAnyTime(prices));
System.out.println(maxProfitFor2Time(prices));
System.out.println(maxProfitForKTime(prices, 3));
以上是关于《漫画算法2》源码整理-9 股票交易最大收益的主要内容,如果未能解决你的问题,请参考以下文章