-
今日学习的文章链接,或者视频链接
-
自己看到题目的第一想法
-
看完代码随想录之后的想法
122
动态规划:
class Solution {
public:
int maxProfit(vector<int>& prices) {
int n = prices.size();
//dp[i][0]:第i天不持有股票能获得的最大利润
//dp[i][1]:第i天持有股票能获得的最大利润
vector<vector<int>> dp(n, vector<int>(2));
for (int i = 0; i < n; i++) {
if (i - 1 == -1) {
// base case
dp[i][0] = 0;
dp[i][1] = -prices[i];
continue;
}
dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] + prices[i]);//之前就不持有或者i天卖出
dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] - prices[i]);//之前就买入或者i天买入
}
return dp[n - 1][0];
}
};
贪心(贪每天的利润):
class Solution {
public:
int maxProfit(vector<int>& prices) {
int n = prices.size();
vector<int> profit_day(n-1,0);
for(int i =1;i<n;i++){
int cur = prices[i]-prices[i-1];
if (cur>0){
profit_day[i-1]=cur;
}
}
int result = 0;
for(auto profit:profit_day){
result+=profit;
}
return result;
}
};
55
贪心求覆盖范围:
class Solution {
public:
bool canJump(vector<int>& nums) {
int n = nums.size();
int farthest = 0;
for(auto i=0;i<=farthest;i++){
farthest = max(farthest,i+nums[i]);
if(farthest >= n-1) {
return true;
}
}
return false;
}
};
45
class Solution {
public:
int jump(vector<int>& nums) {
int cur = 0,next = 0;
int result = 0;
for(auto i=0;i<nums.size();i++){
next = max(next,i + nums[i]);
if(i==cur&&(cur!=nums.size()-1)){
result++;
cur = next;
}
}
return result;
}
};
-
自己实现过程中遇到哪些困难
-
今日收获,记录一下自己的学习时长