假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?
(上面这个跟力扣原题不太一样,原题是中等题,是有可以多次买卖的,用例输出答案是7)
class Solution {
public:
int maxProfit(vector<int>& prices) {
int sum=0;
for(int i=1;i<prices.size();i++){
sum+=max(0,(prices[i]-prices[i-1]));
}
return sum;
}
};
不太会做,试了下贪心,没想到ac了,看了看题解是二维动归,研究研究估计也能做。
——————————————————————
好未来笔试遇到了这个题,纯贪心没过全部用例,再次再复习下二维动归的解法:
class Solution {
public:
int maxProfit(vector<int>& prices) {
int n = (int)prices.size(), ans = 0;
int dp[n][n];//d[i][0]代变第i天不持有股票的最大利润 d[i][1]则代表持有的利润
dp[0][0]=0;//第0天不持有
dp[0][1]=-prices[0];//第0天持有
for (int i = 1; i < n; ++i){
dp[i][0]=max(dp[i-1][0],dp[i-1][1]+prices[i]);
dp[i][1]=max(dp[i-1][1],dp[i-1][0]-prices[i]);
}
return dp[n-1][0];//要卖出 不持有
}
};
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务