LeetCode121 买卖股票最佳时期 2018.6.15

匿名 (未验证) 提交于 2019-12-03 00:27:02

题干:

ii

如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。

注意你不能在买入股票前卖出股票。

示例 1:

输入: [7,1,5,3,6,4] 输出: 5 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。      注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。 

示例 2:

输入: [7,6,4,3,1] 输出: 0 解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。

题很简单,先用了一个比较暴力的方法,可以ac但耗时太长

class Solution { public:     int maxProfit(vector<int>& prices)      {     	int profit = 0,min;     	int len = prices.size();     	for(int i = 0;i < len;i++)     	{     		for(int j = i;j < len;j++)     		{     			if(prices[j] > prices[i])     			{     				if(profit < prices[j] - prices[i])     				{     					profit = prices[j] - prices[i];     				}     			}     		}     	}       	return profit;       } };

后来发现用dp来做效率更高,我们需要两两比较价格,得出较小的买入价格,再比较利润大小,具体见代码

class Solution { public:     int maxProfit(vector<int>& prices)      {         int len = prices.size();         if(len == 0)             return 0;     	int profit = 0,lowprice = prices[0];     	     	for(int i = 1;i < len;i++)         {             lowprice = min(lowprice,prices[i]);//两两比较得出相对较低的买入价格             profit = max(profit,prices[i] - lowprice);//找出较大的利润值         }     	return profit;       } };

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!