贪心解法, 写的不对的欢迎指正!
时间:O(n)
空间:O(1)
// NC134股票(无限次交易)
//最大利润即为每个上升段的差额
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 计算最大收益
* @param prices int整型vector 股票每一天的价格
* @return int整型
*/
int maxProfit(vector<int>& prices) {
// write code here
int sum=0;//总利润
int len=prices.size();
if(len<=1) return 0;
int max_tmp=prices[0];//默认第一个是最大的
int min_tmp=prices[0];//默认第一个是最小的
for(int i=1;i<len;++i){
if(prices[i]<prices[i-1]){
//如果当天股价 比前一天低
//就更新当前最大利润为:max减去min,并累加到sum
//更新最低股价为:当天价格。并将最高股价也更新成一样的
if(max_tmp>min_tmp){
sum+= max_tmp-min_tmp ;
}
min_tmp=prices[i];//更新最低股价为:当天价格。
max_tmp=prices[i];//更新最高股价为:当天价格。
}else{
max_tmp=prices[i];//如果当天股价 >前一天,最高价格更新为当前的
}
}
return sum+max_tmp-min_tmp;//最后一天股价可能比前一天高
}
};


京公网安备 11010502036488号