动态规划
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
/*
题目描述:给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。
设计一个算法来计算你所能获取的最大利润。
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0
思考:
暴力解:双重循环,遍历每个“内层遍历元素-外层遍历元素”,取出其中最大值,若为负数
则取0;
动态规划:memo[i]表示第i天的最大收益。
memo[i]=max(memo[i-1],p[i]-minprice),第i天的最大收益为下列两者
的最大值:第i-1天的最大收益、第i天价格-之前的最低价格。
显然memo[1]=0,循环填满memo[]即可。
*/
class Solution {
public:
int maxProfit(vector<int>& prices) {
int n=prices.size();
vector<int> memo(n,0);
int minprices=prices[0];
memo[0]=0;
for(int i=1;i<n;i++){
if(prices[i]<minprices){
minprices=prices[i];
}
memo[i]=max(memo[i-1],prices[i]-minprices);
}
return memo[n-1];
}
};
int main(){
return 0;
}