Say you have an array for which the ith element is the price of a given stock on day i.
If you were only permitted to complete at most one transaction (ie, buy one and sell one share of the stock), design an algorithm to find the maximum profit.
Example 1:
Input: [7, 1, 5, 3, 6, 4] Output: 5 max. difference = 6-1 = 5 (not 7-1 = 6, as selling price needs to be larger than buying price)
Example 2:
Input: [7, 6, 4, 3, 1] Output: 0 In this case, no transaction is done, i.e. max profit = 0.
开始使用的是暴力方法,列举出所有可能的交易情况。时间复杂度是O(n^2)。结果超时了。class Solution { public: int maxProfit(vector<int>& prices) { int pro=0; int sub=0;//sub暂存所有满足条件的利润,从中选择最大利润 for(int i=0;i<prices.size()-1;i++)//i买入的价格 for(int j=i+1;j<prices.size();j++)//j卖出的价格 { if(prices[i]<prices[j])//且买入在前,卖出在后 { sub=prices[j]-prices[i]; pro=max(pro,sub); } } return pro; } };