题目链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/
一次遍历:O(n)
为什么说这道题经典呢,其实是答案更加的经典:
public class Solution {
public int MaxProfit(int[] prices) {
int minprice = int.MaxValue;
int maxprofit = 0;
for (int i = 0; i < prices.Length; i++)
{
if (prices[i]<minprice)
{
minprice = prices[i];
}
else if (prices[i]-minprice>maxprofit)
{
maxprofit = prices[i] - minprice;
}
}
return maxprofit;
}
}
使我们感兴趣的点是上图中的峰和谷。我们需要找到最小的谷之后的最大的峰。 我们可以维持两个变量——minprice 和 maxprofit,它们分别对应迄今为止所得到的最小的谷值和最大的利润(卖出价格与最低价格之间的最大差值)。