标题:122. 买卖股票的最佳时机 II
难度:中等
天数:第7天,第3/3题
示例 1:
示例 2:
示例 3:
提示:
1 <= prices.length <= 3 * 104
0 <= prices[i] <= 104
class Solution {
//动态规划 第 7 天 3/3
//思路
//1. 只要有收益就卖,然后买入卖时的价格
//2. 如果后边有低于买入的价格,就将买入的按卖出价格卖掉,再买入这个地价,
//3. 出现低价放弃前一天的买入交易,改成当天买入
//例:[7,1,5,3,6,4]
// 天数 | | | | 结束交易持有价格| 操作盈利|
// 第一天 | | 买入7| | 7 | 赚0 |
// |
// | -----------V
// V
// 第二天 | 卖出7 |买入1 | 7-7(卖出7) +1| 1 | 赚0 |
// |
// |---------------V
// V
// 第三天 | 卖出5 |买入5 | 5 - 1 +5| 5 | 赚4 |
// 第四天 | 卖出5 |买入3 | 5 - 5 +3| 3 | 赚0 |
// 第五天 | 卖出6 |买入6 | 6 - 3 +6| 6 | 赚3 |
// 第六天 | 卖出6 |买入4 | 6 - 6 +4| 4 | 赚0 |
public int maxProfit(int[] prices) {
int size = prices.length;
//记录卖出后最小价格
int min = prices[0];
//记录卖出后最大价格
int max = prices[0];
//记录利润
int dp = 0;
if(size == 1 ){
return 0;
}
for(int i = 1; i < size ; i++){
int item = prices[i];
if(item < min){
//出现低价 取消之前的高价买入
max = item;
// 最低价=当前买入价格
min = item;
}else if(item > max){
//出现高价,记录高价
max = item;
}
//如果 高价>持有价格 卖掉计算盈利
if(max > min){
//计算收益
dp += max - min;
//卖出后买入当前股票
max = item;
//最低价 = 当天买入价格
min = item;
}
}
return dp;
}
}