class Solution {
public:
bool canJump(vector<int>& nums) {
int reach=0,n=nums.size();
for(int i=0;i<n;i++){
if(i>reach){
return false;
}
reach=max(i+nums[i],reach);
}
return true;
}
};
方法二:
class Solution {
public:
bool canJump(vector<int>& nums) {
int n =nums.size();
int last =n-1;
for(int i=n-2;i>=0;i--){
if(i+nums[i]>=last){
last =i;
}
}
return last==0;
}
};
class Solution {
public:
int maxProfit(vector<int>& prices) {
int n=prices.size();
int minprice =prices[0];
int maxprofit =0;
for(int i=1;i<n;i++){
maxprofit=max(maxprofit, prices[i]-minprice);
minprice=min(minprice,prices[i]);
}
return maxprofit;
}
};
class Solution {
public:
int maxProfit(vector<int>& prices) {
int n=prices.size();
int dp[n][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][0]-prices[i], dp[i-1][1]);
}
return dp[n-1][0];
}
};
class Solution {
public:
int maxProfit(vector<int>& prices) {
int n=prices.size();
int buy1 =-prices[0];
int buy2 =-prices[0];
int sell1=0;
int sell2=0;
for(int i=1;i<n;i++){
buy1=max(buy1,-prices[i]);
sell1=max(sell1, buy1+prices[i]);
buy2 =max(buy2,sell1-prices[i]);
sell2=max(sell2, buy2+prices[i]);
}
return sell2;
}
};
class Solution {
public:
int maxProfit(vector<int>& prices) {
int maxprofit=0;
int minprice=1e9;
for(int price:prices){
maxprofit = max(maxprofit,price-minprice);
minprice = min(minprice,price);
}
return maxprofit;
}
};