package LeetCodeDemo.primary;
public class Demo22 {
public static void main(String[] args){
Demo22 demo22 = new Demo22();
int[] nums = {2,2,5};
System.out.println(demo22.maxProfit(nums));
}
public int maxProfit(int[] prices) {
int arrLen = prices.length;
if (arrLen == 1){
return 0;
}
int i ;
int val = 0; // 用来表示最终的利润
int initVal = 0 ; // 用来表示持有成本
boolean flag = false;
for ( i = 0 ; i < arrLen; i++ ){
if ( i == 0 ){
// 最开始的情况, 判断是否需要直接入手
if (prices[0] - prices[1] < 0){
initVal = prices[0];
flag = true;
}
continue;
}
if (i == arrLen - 1){
// 对于最后一个同样的道理, 判断是否还有股票在手中,毕竟这时候买入没有意义
if (flag == true && prices[i] - prices[i-1] >= 0){
val += prices[i] - initVal;
}
break;
}
if (flag){
// 表示已有股票在手,那么需要一个判断出手的条件。
// 对于股票,如果后一天的行情比前一天差,那么就直接出手
if (prices[i] - prices[i+1] >= 0){
val += prices[i] - initVal; // 用当前值减去持有价格
flag = false;
}
}else {
// 当前没有股票在手上
if (prices[i] - prices[i-1] <= 0 && prices[i+1] - prices[i] > 0){
// 这里是先判断是否入手该股票, 显然满足此条件是有利润可言的,对于股票来说,只要有利润就直接入手。
initVal = prices[i];
flag = true;
}
}
}
return val;
}
}
来源:CSDN
作者:浮生若梦yoo
链接:https://blog.csdn.net/qq_40860649/article/details/103743734