题目
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.
分析
这个让我联想到了11-Container with Most Water
然后打算用Two Pointer 的方法来做
然而并没有行得通,题目要求是第二个数字一定要比第一个数字大才行
实现
/*
Author:Fancy
Date: 2017-03-27
Algorithm: 122-Best Time to Buy and Sell Stock
Time Complexity: 0(n)
*/
class Solution {
public:
int maxProfit(vector<int>& prices)
{
if (prices.size()==0)
return 0;
int minPrice = INT16_MAX, maxPro = 0;
for (int i = 0; i < prices.size(); i++)
{
if (prices[i] < minPrice)
minPrice = prices[i];
else if (prices[i] - minPrice >maxPro)
maxPro = prices[i] - minPrice;
}
return maxPro;
}
};
“`