题目:
给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。
最终解答:
**方法一:**遍历一遍数组,计算每次 到当天为止 的最小股票价格和最大利润。
class Solution {
public int maxProfit(int[] prices) {
int ans=0;
int minPrice=prices[0];
for(int i=1;i<prices.length;i++){
ans=Math.max(ans,prices[i]-minPrice);
if(minPrice>prices[i]){
minPrice=prices[i];
}
}
return ans;
}
}
方法二:
class Solution {
public:
int maxProfit(vector<int>& prices) {
int n = prices.size();
if (n == 0) return 0; // 边界条件
int minprice = prices[0];
vector<int> dp (n, 0);
for (int i = 1; i < n; i++){
minprice = min(minprice, prices[i]);
dp[i] = max(dp[i - 1], prices[i] - minprice);
}
return dp[n - 1];
}
};