股票的最大利润
题目
假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?
思路 动态规划
动态规划优化
C++ dp未优化
class Solution {
public:
int maxProfit(vector<int>& prices) {
int n = prices.size();
if(n==0)
return 0;
int dp[n];
dp[0] = 0;
for(int i=1; i<n; ++i)
{
int min = prices[0];
for(int j=0; j<i; ++j)
if(prices[j]<min)
min = prices[j];
dp[i] = max(dp[i-1], prices[i]-min);
}
return dp[n-1];
}
};
C++ 优化后的
class Solution {
public:
int maxProfit(vector<int>& prices) {
int n = prices.size();
if(n==0)
return 0;
int cost = prices[0], profit=0;
for(int i=1; i<n; ++i)
{
cost = min(cost, prices[i]);
profit = max(profit, prices[i]-cost);
}
return profit;
}
};
python 优化后的
class Solution:
def maxProfit(self, prices: List[int]) -> int:
cost, profit = float("+inf"), 0
for price in prices:
cost = min(cost, price) # 更新最小值
profit = max(profit, price-cost) # 更新利润
return profit