代码
超内存了
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;}
};
