扫数组到当前这一天的时候,局部最优就是要么今天卖出(昨天不卖了)(前提是之前已经买了,且已知最大profit是在昨天卖出),要么今天买入(局部profit为零)
所以local的比较参数不是很好想明白。
public class Solution {
public int maxProfit(int[] prices) {
if (prices == null|| prices.length == 0 || prices.length == 1){
return 0;
}
int local = 0;
int global = 0;
for (int i = 0; i < prices.length-1; i ++){
local = Math.max(local + prices[i+1] - prices[i],0);
global = Math.max(local, global);
}
return global;
}
}
另一种做法 不用dp 就找当前element之前的min price,然后维持max profit
public class Solution {
public int maxProfit(int[] prices) {
if (prices.length == 0)
{
return 0;
}
int max = 0, min = prices[0];
int profit = 0;
for (int i = 1; i < prices.length; i++)
{
if (prices[i] < min)
{
min = prices[i];
}
else
{
if (prices[i] - min > profit)
{
profit = prices[i] - min;
}
}
}
return profit;
}
}