注意点:
1.买卖的最佳时机就是前后两个数之差,如果是正数的话就相加,是负数的话就加0;
class Solution {
public:
int maxProfit(vector<int>& prices) {
int result = 0;
for(int i = 1; i < prices.size(); i++) {
result += max(prices[i] - prices[i-1], 0);
}
return result;
}
};
注意点:
1.将这道题转换成取范围的形式----数组下标+数组的值 >= 数组最后一个的下标的值 ? true:false;
class Solution {
public:
bool canJump(vector<int>& nums) {
int cover = 0;
// 注意是i <= cover
for(int i = 0; i <= cover; i++) {
// 将cover改为自己所在的点序数和val之和
cover = max(i + nums[i], cover);
if(cover >= nums.size()-1) return true;
}
return false;
}
};
注意点:
1.和卡哥讲的不太一样,在原有基础进行了改变,更有利于理解
class Solution {
public:
int jump(vector<int>& nums) {
if(nums.size() == 1) return 0;
int result = 0;
int curDistance = 0;
int nextDistance = 0;
for(int i = 0; i <= curDistance; i++ ) {
nextDistance = max(i+nums[i], nextDistance);
// 第一阶段遍历之后,通过if语句进入第二阶段继续进行遍历
if(i == curDistance) {
result++;
curDistance = nextDistance;
// 当下一个阶段大于数组的大小的时候直接return
if(nextDistance >= nums.size()-1) break;
}
}
return result;
}
};