122.买卖股票的最佳时机II
本题思路比较巧妙,将n天之内的利润进行了拆分,例如P(3)-P(1)=P(3)-P(2)+P(2)-P(1),按照这个思路,将所有正数差值加起来即可
class Solution {
public:
int maxProfit(vector<int>& prices) {
int profit = 0;
for (int i = 1; i < prices.size(); i++){
if (prices[i] > prices[i-1]){
profit += (prices[i] - prices[i-1]);
}
}
return profit;
}
};
55. 跳跃游戏
判断每个位置的最大跳跃距离与当前最大距离,如果大了,就更新最大距离,直到超过最大距离
class Solution {
public:
bool canJump(vector<int>& nums) {
int n = nums.size();
int most = 0;
for (int i = 0; i < n; i++){
if (i <= most){
most =max(most, nums[i] + i);
if (most >= n-1){
return true;
}
}
}
return false;
}
};
45.跳跃游戏II
记录当前能到最大位置end与下一步的最大位置most。当移动到end处时,就需要必须走一步,此时step++。第一个if判断也可以去掉,不影响结果
class Solution {
public:
int jump(vector<int>& nums) {
int n = nums.size();
int most = 0;
int step = 0;
int end = 0;
for (int i = 0; i < n-1; ++i){
if (most >= i){
most = max(i + nums[i],most);
if (i == end){
end = most;
++step;
}
}
}
return step;
}
};