122.买卖股票的最佳时机
题目链接: 122.买卖股票的最佳时机
**贪心策略:**只收取正的利润
代码如下:
class Solution {
public int maxProfit(int[] prices) {
int result = 0;
for (int i = 1; i < prices.length; i++) {
result += Math.max(prices[i] - prices[i - 1], 0);
}
return result;
}
}
跳跃游戏
题目链接: 55. 跳跃游戏
更新最大右边界 看是否大于终点
代码如下:
class Solution {
public boolean canJump(int[] nums) {
if (nums.length == 1) {
return true;
}
//覆盖范围, 初始覆盖范围应该是0,因为下面的迭代是从下标0开始的
int coverRange = 0;
//遍历当前覆盖范围 看覆盖范围内的点是否到达更大的覆盖范围
for (int i = 0; i <= coverRange; i++) {
coverRange = Math.max(coverRange, i + nums[i]);
if (coverRange >= nums.length - 1) {
return true;
}
}
return false;
}
}
跳跃游戏II
题目链接:跳跃游戏II
**解题思路:**尽可能增加覆盖范围
在遍历过程中维护当前覆盖范围和下一个最大的覆盖范围
当i在当前范围末尾时 更新到下一个覆盖范围 跳跃步数加一
代码如下:
class Solution {
public int jump(int[] nums) {
if(nums.length==1){
return 0;
}
//当前覆盖范围
int curCover=0;
//下一步覆盖范围
int nextCover=0;
int result=0;
for(int i=0;i<nums.length;i++){
//收集下一步最大覆盖
nextCover=Math.max(i+nums[i],nextCover);
if(i==curCover){
if(i!=nums.length-1){
//到达上一个覆盖范围的末尾 更新覆盖范围
result++;
curCover=nextCover;
if(curCover>=nums.length-1){
break;
}
}
}
}
return result;
}
}