题目描述:
思路:
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;
}
};