法一:动态规划
制造一个动规数组dp。存储价格表prices为i时的最佳价格差。这第i次和历史最小值的差,和dp存储的i-1的遗留最大收益相比,谁大谁存进dp的第i个记录作为第i时的遗留最大收益。也就是,前i天的最大收益 = max{前i-1天的最大收益,第i天的价格-前i-1天中的最小价格}。
class Solution {
public int maxProfit(int[] prices) {
int[] dp=new int[prices.length];
dp[0]=0;int min=prices[0];int i=1;
for(;i<prices.length;i++){
if(prices[i]<min)
min=prices[i];
dp[i]=Math.max(dp[i-1],prices[i]-min);
}
return dp[i-1];
}
}