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