贪心,局部最优:收集每天的正利润,全局最优:求得最大利润。
class Solution {
public:
int maxProfit(vector<int>& prices) {
int ans = 0;
for (int i = 1; i < prices.size(); i++) {
ans += max(prices[i] - prices[i - 1], 0);
}
return ans;
}
};
贪心思路,考虑每个点能跳到的最远距离
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 = max(i + nums[i], cover);
if (cover >= nums.size() - 1) return true;
}
return false;
}
};
在当前可以跳到的范围内搜索,找出跳到该点后能再跳到的最远距离
class Solution {
public:
int jump(vector<int>& nums) {
int ans = 0;
int begin = 0;
int end = 0;
//[begin, end]
while(end < nums.size()-1){
int temp = 0;
for(int i = begin; i <= end; i++){
temp = max(nums[i]+i, temp);
}
begin = end+1;
end = temp;
ans++;
}
return ans;
}
};