题目
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.
题解
这是比较简单的题目。我们只需要遍历数组,记录min值和maxProfit值,当遇到一个数比min还小时,把他赋值给minMin, 之后如果数组的某个数减去minMin得到的收益大于maxProfit,那么就让maxProfit等于该值, min = minMin。
代码
#include <iostream>
#include <vector>
#include <climits>
using namespace std;
class Solution {
public:
int maxProfit(vector<int>& prices) {
if(prices.size() < 2){
return 0;
}
int min = prices[0];
int maxProfit = prices[1] - prices[0];
int minMin = INT_MAX;
for(int i : prices){
if(i < min && i < minMin){
minMin = i;
}
maxProfit = max(maxProfit, i - min);
if(minMin != INT_MAX && i - minMin > maxProfit){
maxProfit = i - minMin;
min = minMin;
}
}
return maxProfit;
}
};