题目描述:
给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。
在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。
返回 你能获得的 最大 利润 。
思路:
贪心:局部最优(在每次价格下跌之前卖出可获得局部最大利润)-> 全局最优
代码:
遍历一次:
class Solution {
public:
int maxProfit(vector<int>& prices) {
int size = prices.size();
if (size == 1)
return 0;
vector<int> money;
int temp = 0;
for (int i = 0; i < size - 1; )
{
for (int j = i + 1; j < size; j++)
{
if (prices[j] - prices[i] >= temp)
temp = prices[j] - prices[i];
if (prices[j] - prices[i] < temp || j == size - 1)
{
money.push_back(temp);
temp = 0;
i = j;
break;
}
}
}
money.push_back(0);
//int sum = 0;
//int monsize = money.size();
// for (int i = 0; i < monsize; i++)
// sum += money[i];
// return sum;
return accumulate(money.begin(), money.end(), 0);
}
};
看似两个循环,其实只遍历了一次,因为当 算得当前i的最大利益后 或 当前i的下一个时机价格更低(即不应在i买进) 或 已是最后一天 时,i=j(转到下一个时机,再次看是否该买进&买进是否有最大利益)。