跳跃游戏
class Solution {
public:
bool canJump(vector<int>& nums) {
int n=nums.size();
int len=0;
for(int i=0;i<n-1;i++)
{
len=max(len,i+nums[i]);
if(len<=i) return false;
}
return len>=n-1;
}
};
跳跃游戏2
class Solution {
public:
int jump(vector<int>& nums) {
if (nums.size() == 1) return 0;
int curDistance = 0;
int ans = 0;
int nextDistance = 0;
for (int i = 0; i < nums.size()-1; i++)
{
nextDistance = max(nums[i] + i, nextDistance);
if (i == curDistance)
{
curDistance = nextDistance;
ans++;
//if (nextDistance >= nums.size() - 1) break;
}
}
return ans;
}
};
买卖股票的最佳时机1
class Solution {
public:
int maxProfit(vector<int>& prices) {
int n = prices.size();
vector<vector<int>> dp(n, vector<int>(2));
dp[0][0] = 0;
dp[0][1] = -prices[0];
for(int i=1;i<n;i++)
{
dp[i][0]=max(dp[i-1][0],dp[i-1][1]+prices[i]);
dp[i][1]=max(dp[i-1][1],0-prices[i]);
}
return dp[n-1][0];
}
};
买卖股票的最佳时机2
class Solution {
public:
int maxProfit(vector<int>& prices) {
int n = prices.size();
vector<vector<int>> dp(n, vector<int>(2, 0));
dp[0][0] = 0;
dp[0][1] = -prices[0];
for(int i=1;i<n;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[n - 1][0];
}
};
买卖股票的最佳时机3
class Solution {
public:
int maxProfit(vector<int>& prices) {
int max_k = 2, n = prices.size();
vector<vector<vector<int>>> dp(n, vector<vector<int>>(max_k + 1, vector<int>(2)));
for(int k=1;k<=max_k;k++)
{
dp[0][k][0] = 0;
dp[0][k][1] = -prices[0];
}
for (int i = 1; i < n; i++)
{
for (int k = max_k; k >= 1; k--)
{
dp[i][k][0] = max(dp[i-1][k][0], dp[i-1][k][1] + prices[i]);
dp[i][k][1] = max(dp[i-1][k][1], dp[i-1][k-1][0] - prices[i]);
}
}
return dp[n - 1][max_k][0];
}
};
买卖股票的最佳时机4
class Solution {
public:
int maxProfit(int k, vector<int>& prices) {
int max_k = k, n = prices.size();
vector<vector<vector<int>>> dp(n, vector<vector<int>>(max_k + 1, vector<int>(2,0)));
for (int i = 0; i < n; i++)
{
for (int k = max_k; k >= 1; k--)
{
if (i - 1 == -1)
{
// 处理 base case
dp[i][k][0] = 0;
dp[i][k][1] = -prices[i];
continue;
}
dp[i][k][0] = max(dp[i-1][k][0], dp[i-1][k][1] + prices[i]);
dp[i][k][1] = max(dp[i-1][k][1], dp[i-1][k-1][0] - prices[i]);
}
}
return dp[n - 1][max_k][0];
}
};
买卖股票的最佳时机(有冷冻期)
class Solution {
public:
int maxProfit(vector<int>& prices)
{
int n = prices.size();
if(n<=1) return 0;
vector<vector<int>> dp(n, vector<int>(2));
dp[0][0]=0;
dp[0][1]=-prices[0];
dp[1][0]=max(dp[0][0],dp[0][1]+prices[1]);
dp[1][1]=max(dp[0][1],-prices[1]);;
for(int i=2;i<n;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-2][0]-prices[i]);
}
return dp[n-1][0];
}
};
买卖股票的最佳时机(有手续费)
class Solution {
public:
int maxProfit(vector<int>& prices, int fee) {
int n = prices.size();
vector<vector<int>> dp(n, vector<int>(2, 0));
dp[0][0] = 0;
dp[0][1] = -prices[0];
for (int i = 1; i<n; i++)
{
dp[i][0] = max(dp[i-1][0], dp[i-1][1] + prices[i]-fee);
dp[i][1] = max(dp[i-1][1], dp[i-1][0] - prices[i]);
}
return dp[n - 1][0];
}
};