leetcode|121:Best Time to Buy and Sell Stock

题目描述:


思路:

1.假设最大的利润是0,使用双重循环来比较差值,找出最大的利润值,时间复杂度O(n^2),空间复杂度O(1)

代码如下:

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

2.我们只需要遍历一次数组, 通过一个变量记录当前最低价格, 同时算出此次交易利润, 并与当前最大值比较就可以了

时间复杂度O(n),空间复杂度O(1)

class Solution
{
public:
	int maxProfit(vector<int>& prices)
	{
		if (prices.size() <= 1)//如果只要一个元素或者没有元素的话,利润是0
			return 0;
		int size = prices.size();
		int minPit = prices[0];//假设第一个数是最小的数
		int profit = prices[1] - prices[0];//假设最大的利润是前面两个数只差
		for (int i = 2; i < size; i++)
		{
			minPit = min(minPit, prices[i - 1]);//比较求出最小的数
			profit = max(profit, prices[i] - minPit);//比较求出最大的利润
		}
		return profit;
	}
};

猜你喜欢

转载自blog.csdn.net/linqianbi/article/details/80377190