看labuladong的动态规划解题方法,掌握股票问题规律。
class Solution {
public:
int maxProfit(vector<int>& prices)
{
vector<vector<int>> dp(prices.size(), vector<int>(2, 0));
dp[0][1] = -prices[0];
for (int i=1; i<prices.size();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[dp.size()-1][0];
}
};
class Solution {
public:
bool canJump(vector<int>& nums) {
int cover = 0;
if (nums.size() == 1) return true; // 只有一个元素,就是能达到
for (int i = 0; i <= cover; i++) { // 注意这里是小于等于cover
cover = max(i + nums[i], cover);
if (cover >= nums.size() - 1) return true; // 说明可以覆盖到终点了
}
return false;
}
};
class Solution {
public:
int jump(vector<int>& nums)
{
if (nums.size()==1) return 0;
int ans = 0;
int cur = 0;
int next = 0;
for (int i=0; i<nums.size(); i++)
{
next = max(next, nums[i]+i);
if (i==cur)
{
ans++;
cur = next;
if (cur >= nums.size()-1) break;
}
}
return ans;
}
};