LeetCode-121. 买卖股票的最佳时机
示例:
输入:[7,1,5,3,6,4]
输出:5
解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,
最大利润 = 6-1 = 5 。
注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。
思路
最佳点问题,按照下图 可以看得出,如果想要收获最大化,则需要在最低谷时买入,离最低谷最远的最高谷时抛出。 最高谷一定是在最低谷之后的日子中,所以我们只需要找到最低谷的日子,然后以这一天为准往后找最大的差。
那么在代码里,我们需要进行动态规划,设置最小的值minIndex为当前日子以及往前最小的股票价格,设置max为到当前日子,倘若买入之前的“最低谷”能赚到的最大的钱。 变量设置好,就可以入手代码了。
代码
public int maxProfit(int[] prices) {
int minIndex=0;
int max=0;
for(int i=0;i<prices.length;i++){
minIndex=prices[minIndex]>prices[i]?i:minIndex; //确定最低谷的股票
int temp=prices[i]-prices[minIndex];
max=temp>max?temp:max;
}
return max;
}
Powered by Waline v2.14.7