力扣-数组-121 买卖股票的最佳时机
代码
超内存了
class Solution {
public:
int maxProfit(vector<int>& prices) {
int dp[prices.size()][prices.size()];
for(int i = 0;i < prices.size();i++){
for(int j = i; j<prices.size();j++){
if(i == j){
dp[i][j] = 0;
}else{
dp[i][j] = max( max( max(0, prices[j]-prices[i]), dp[i][j-1]), prices[j]-prices[i+1]);
}
}
}
int res = 0;
for(int i = 0; i< prices.size();i++){
res = max(res, dp[i][prices.size()-1]);
}
return res;
}
};
二维变一维,不超内存,超时间了
class Solution {
public:
int maxProfit(vector<int>& prices) {
int dp[prices.size()]; // i —— size()-1 最大的那一个
for(int i = 0;i < prices.size();i++){
int last = 0;
for(int j = i; j<prices.size();j++){
if(i == j){
last = 0;
}else{
int temp = max( max( max(0, prices[j]-prices[i]), last), prices[j]-prices[i+1]);
last = temp;
}
}
dp[i] = last;
}
int res = 0;
for(int i = 0; i< prices.size();i++){
res = max(res, dp[i]);
}
return res;
}
};
看了大佬的题解,才明白跟dp没啥关系,主要应用贪心了
最后附上基于此思想的代码
class Solution {
public:
int maxProfit(vector<int>& prices) {
int minPrice = prices[0];
int profit = 0;
for(int i = 1; i < prices.size(); i++) {
profit = max(profit , prices[i] - minPrice);
if(prices[i] < minPrice){
minPrice = prices[i];
}
}
return profit;
}
};