第一种想到的方法时暴力法,果不其然,超时了。。。
class Solution {
public int maxProfit(int[] prices) {
int money = 0;
int maxMoney = 0;
for(int i = 0;i < prices.length - 1;i++){
for(int j = i + 1;j < prices.length;j++){
money = prices[j] - prices[i];
if(money > maxMoney){
maxMoney = money;
}
}
}
return maxMoney;
}
}
第二种方法就是动态规划了
设dp[i]表示前i天的最大利润
则前i天的最大利润=MAX(前i-1天的最大利润,第i天的价格-前i-1天的最小价格)
状态转移方程:
dp[i]=min(dp[i-1],prices[i]-min(dp[i-1]))
class Solution {
public int maxProfit(int[] prices) {
int minPrice = prices[0];
int dp[] = new int[prices.length];
for(int i = 1;i < prices.length;i++){
dp[i] = Math.max(dp[i - 1],prices[i] - minPrice);
minPrice = Math.min(minPrice,prices[i]);
}
return dp[prices.length - 1];
}
}