一.暴力法(C)
int maxProfit(int* prices, int pricesSize)
{
maxProfit = 0;
for(int i = 0; i < pricesSize - 1; i++)
{
for(int j = 0; j < pricesSize; j++)
{
if(prices[j] - prices[i] > maxProfit)
{
maxProfit = prices[j] - prices[i];
}
}
}
}
二.贪心算法(C)
int maxProfit(int* prices, int pricesSize)
{
int maxProfit = 0;
int minProfit = prices[0];
int i;
for(i = 0; i < pricesSize; i++)
{
if(minProfit > prices[i]) //记录最小数
minProfit = prices[i];
if(prices[i]-minProfit > maxProfit)
maxProfit = prices[i] - minProfit;
}
return maxProfit;
}
三.维护单调递减的栈(C++)
当前元素每次和栈顶元素比较,大就更新答案,小就入栈
class Solution
{
public:
int maxProfit(vector<int>& prices)
{
int ans = 0;
vector<int> St;
prices.emplace_back(-1); \\ 哨兵👨✈️
for (int i = 0; i < prices.size(); ++ i)
{
while (!St.empty() && St.back() > prices[i]) \\ 维护单调栈📈
{
ans = std::max(ans, St.back() - St.front()); \\ 维护最大值
St.pop_back();
}
St.emplace_back(prices[i]);
}
return ans;
}
};